JavaScript 函数调用将编码的单引号 %27 解释为文字
JavaScript function call interprets encoded Single Quote %27 as literal
要求:
- 我必须
fetch
包含单引号的 URL。
- 我需要通过以下方式调用函数;例如
<a href="javascript:my_function('my_quote%27s.txt');">...</a>
.
经过 很多 尝试正确编码单引号的麻烦 (%27
) Waterfox 和 Chrome both 不断抛出错误。 Chrome 让我看到错误被触发是因为浏览器正在自行解码字符串(当我 not 将它们编程为时)转向 %27
进入 文字单引号字符 所以它甚至在函数被调用之前就出错了(例如 my_function('my_quotes's.txt')
引号被内部解码并导致明显的三重引号问题)。
我可以使用 PHP 的 htmlentities($file_name, ENT_QUOTES)
,尽管我必须用字符串替换 '
,这看起来毫无意义。
- 我需要支持单引号并通过
javascript:
拨打电话。
- 我想在调用函数时避免对编码字符串进行字面解释。
- 我想尽量减少麻烦,只使用 编码,JavaScript 不会抱怨。
- 没有框架或库。
如何以 JavaScript 不会自己以某种方式在内部解码并抛出错误的方式正确编码单引号?
一个href
属性的值是一个URL。 javascript:
方案 URL 是 URL.
如果您希望 %
在 URL 中表示“百分号”而不是“百分号编码字符的开头”,那么您需要对其进行 URL 编码.
...my_quote%2527s.txt...
I am required to make the call via javascript:
不寒而栗。请解决这个问题。 It's known as a bad practice since over ten years! 这正是导致 URI 解码的原因 - javascript:
架构后跟一个百分比编码值以供解释。
所以如果你从js代码开始
my_function('my"e's.txt');
它将成为
之一
javascript:my_function%28%27my%26quote%27s.txt%27%29%3B
javascript:my_function(%27my%26quote%27s.txt%27)%3B
javascript:my_function('my%26quote's.txt')%3B
(撇号'
和括号其实不需要编码)
但是 'my_quote's.txt'
不是您想要开始的有效 javascript。您实际要查找的是 'my_quote\'s.txt'
或 "my_quote's.txt'
。要在 javascript:
-scheme URI 中使用这些,它变成
javascript:my_function('my_quote\'s.txt')%3B
javascript:my_function("my_quote's.txt")%3B
因此,如果您从动态文件名值生成此 href
字符串,则必须
- String-转义JS字符串字面量中的文件名
- URL-将完整代码编码在
javascript
url
- html-实体-转义完整的
href
属性值
要求:
- 我必须
fetch
包含单引号的 URL。 - 我需要通过以下方式调用函数;例如
<a href="javascript:my_function('my_quote%27s.txt');">...</a>
.
经过 很多 尝试正确编码单引号的麻烦 (%27
) Waterfox 和 Chrome both 不断抛出错误。 Chrome 让我看到错误被触发是因为浏览器正在自行解码字符串(当我 not 将它们编程为时)转向 %27
进入 文字单引号字符 所以它甚至在函数被调用之前就出错了(例如 my_function('my_quotes's.txt')
引号被内部解码并导致明显的三重引号问题)。
我可以使用 PHP 的 htmlentities($file_name, ENT_QUOTES)
,尽管我必须用字符串替换 '
,这看起来毫无意义。
- 我需要支持单引号并通过
javascript:
拨打电话。 - 我想在调用函数时避免对编码字符串进行字面解释。
- 我想尽量减少麻烦,只使用 编码,JavaScript 不会抱怨。
- 没有框架或库。
如何以 JavaScript 不会自己以某种方式在内部解码并抛出错误的方式正确编码单引号?
一个href
属性的值是一个URL。 javascript:
方案 URL 是 URL.
如果您希望 %
在 URL 中表示“百分号”而不是“百分号编码字符的开头”,那么您需要对其进行 URL 编码.
...my_quote%2527s.txt...
I am required to make the call via
javascript:
不寒而栗。请解决这个问题。 It's known as a bad practice since over ten years! 这正是导致 URI 解码的原因 - javascript:
架构后跟一个百分比编码值以供解释。
所以如果你从js代码开始
my_function('my"e's.txt');
它将成为
之一javascript:my_function%28%27my%26quote%27s.txt%27%29%3B
javascript:my_function(%27my%26quote%27s.txt%27)%3B
javascript:my_function('my%26quote's.txt')%3B
(撇号'
和括号其实不需要编码)
但是 'my_quote's.txt'
不是您想要开始的有效 javascript。您实际要查找的是 'my_quote\'s.txt'
或 "my_quote's.txt'
。要在 javascript:
-scheme URI 中使用这些,它变成
javascript:my_function('my_quote\'s.txt')%3B
javascript:my_function("my_quote's.txt")%3B
因此,如果您从动态文件名值生成此 href
字符串,则必须
- String-转义JS字符串字面量中的文件名
- URL-将完整代码编码在
javascript
url - html-实体-转义完整的
href
属性值