JavaScript 函数调用将编码的单引号 %27 解释为文字

JavaScript function call interprets encoded Single Quote %27 as literal

要求:

经过 很多 尝试正确编码单引号的麻烦 (%27) Waterfox 和 Chrome both 不断抛出错误。 Chrome 让我看到错误被触发是因为浏览器正在自行解码字符串(当我 not 将它们编程为时)转向 %27进入 文字单引号字符 所以它甚至在函数被调用之前就出错了(例如 my_function('my_quotes's.txt') 引号被内部解码并导致明显的三重引号问题)。

我可以使用 PHP 的 htmlentities($file_name, ENT_QUOTES),尽管我必须用字符串替换 ',这看起来毫无意义。

如何以 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&quote'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 字符串,则必须

  1. String-转义JS字符串字面量中的文件名
  2. URL-将完整代码编码在javascripturl
  3. html-实体-转义完整的href属性值