编码的撇号将转换为%27

-1 javascript encoding uri google-chrome

我想访问以下链接:

http://localhost:8080/lookups/TagGroup.html?
    is_guideline_tag=true&field_name=%3C%3Ealert('1')%3E&tag_group_id=38
Run Code Online (Sandbox Code Playgroud)

但是当我将其粘贴到浏览器(Chrome 63.0.3239.84)中时,它变成:

http://localhost:8080/lookups/TagGroup.html?
    is_guideline_tag=true&field_name=%3C%3Ealert(%271%27)%3E&tag_group_id=38
Run Code Online (Sandbox Code Playgroud)

因此,单引号替换为%27,我无法访问链接。

我还要提及的是,我上面的链接中的field_name是这样获得的:encodeURIComponent("<>alert('1')>")应该返回%3C%3Ealert('1')%3E

有任何想法吗?

T.J*_*der 5

因此撇号已替换为%27,但我无法访问该链接

%27是包含'在URI编码的字符串中的正确,最新的方式(URL中的查询字符串是URI编码的)。如果您在服务器端遇到问题,听起来好像您没有正确进行URI解码。这就是您需要解决的问题。如果您对它进行URI解码,那么您的字段就可以了:

console.log(decodeURIComponent('%3C%3Ealert(%271%27)%3E'));
Run Code Online (Sandbox Code Playgroud)

您可能想知道为什么Chrome可以转换'%27encodeURIComponent不能转换为。这是因为Chrome浏览器实现了最新的RFC 3986定义,该定义包括'必须编码的保留字符,但encodeURIComponent改用了过时的RFC 2396定义,该定义未列出'为保留字符。

(您也可能会奇怪为什么decodeURIComponent解码%27,如果encodeURIComponent不编码它。这是因为所有的编码实体进行解码,不只是选择的。%nn其中nn是两个十六进制数字总是定义应该解码的编码实体,无论其是否必须原始编码。)


我假设您对查询字符串中的代码也要非常小心...