Home > Backend Development > PHP Tutorial > javascript - 浏览器的解码顺序(html解码、url解码以及js解码)

javascript - 浏览器的解码顺序(html解码、url解码以及js解码)

WBOY
Release: 2016-06-06 20:40:48
Original
1331 people have browsed it

<code>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">


<a href="javascript:alert('<?php%20echo%20%24_GET%5B'input'%5D;?>');">test</a>


</code>
Copy after login
Copy after login

代码如上,当参数input的值为:%26lt%5cu4e00%26gt的时候,点击test文本,弹窗内容为:
想知道,从输入参数到弹窗的整个过程中浏览器是如何对%26lt%5cu4e00%26gt进行顺序解码的?

回复内容:

<code>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">


<a href="javascript:alert('<?php%20echo%20%24_GET%5B'input'%5D;?>');">test</a>


</code>
Copy after login
Copy after login

代码如上,当参数input的值为:%26lt%5cu4e00%26gt的时候,点击test文本,弹窗内容为:
想知道,从输入参数到弹窗的整个过程中浏览器是如何对%26lt%5cu4e00%26gt进行顺序解码的?

服务端收到请求,进入代码逻辑处理时

input的值,被URLDecode,变为&lt\u4e00&gt
浏览器从服务端获取的页面数据就已经变成了&lt\u4e00&gt
此时通过查看页面源码(注意不是页面右键点检查元素)可以看到

<code><a href="javascript:alert('&lt%5Cu4e00&gt');">test</a>
</code>
Copy after login

浏览器在渲染的时候

作为URL的href字符串 javascript:alert('&lt\u4e00&gt'); 被HTMLEntity解码,变为

<code><a href="javascript:alert('<%5Cu4e00>');">test</a>
</code>
Copy after login

这一步可以通过在页面上右键点击test链接,选择检查元素,可以看出实际渲染出的dom元素

点击test链接时

执行的其实是一句javascript代码,其中有一个字符串,'',里面有一个转义字符\u4e00,对其进行逆转义,由前导符\u可知这是一个unicode编码的转义,将这6个字节的字符串'\u4e00'转化为一个实际上占3个字节空间的unicode字符'一',此时整个字符串占用的内存空间为

>
3c e4 b8 80 3e

如果你直接在代码里写成 alert('');,这个字符串的内部存储方式也是这样的

最终渲染alert框时

由系统将上字节码,翻译为可显示的对应编码的字符,渲染在屏幕上

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template