Rumah >pembangunan bahagian belakang >tutorial php >javascript - 浏览器的解码顺序(html解码、url解码以及js解码)

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

WBOY
WBOYasal
2016-06-06 20:40:481311semak imbas

<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>

代码如上,当参数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>

代码如上,当参数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>

浏览器在渲染的时候

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

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

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

点击test链接时

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

>
3c e4 b8 80 3e

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

最终渲染alert框时

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

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn