首页 > 解决方案 > 尽管使用 htmlspecialchars 对单引号进行编码,JavaScript 仍然抱怨这些引号需要在函数调用中转义

问题描述

发生了一些奇怪的事情,我很困惑。

我有一个基本上看起来像这样的链接:

<a href="javascript:uploadVariantPicture('size:&#039;test2&#039');">Link</a>

如您所见,我正在使用参数“size:'test2'”调用函数uploadVariantPicture。

但是,当我实际单击该链接时,JavaScript 抱怨两个编码的单引号没有被转义。我收到以下错误:

SyntaxError:意外的标识符“test2”。预期 ')' 结束参数列表。

如果我解码两个编码的单引号并使用反斜杠对其进行转义,则函数调用成功。但问题是我需要对其进行编码。我不能让它不编码并转义引号。这不适用于我的情况。

任何帮助是极大的赞赏。我超级困惑。

标签: javascriptjqueryhtmlspecialcharssingle-quotes

解决方案


HTML 字符实体和转义符在解析源代码时被 HTML 解析器替换。对于引号,它允许在用于引用源中的属性值的 HTML 属性中包含相同类型的引号。

例如

 <element attribute="&quot;">
 <element attribute='&#039;'>

在源代码中会分别产生"(双引号) 和'(单引号) 的属性值,尽管是用于在 HTML 源代码中引用属性值的分隔符。

因此

 <a href="javascript:uploadVariantPicture('size:&#039;test2&#039');">Link</a>

将产生一个href属性值

  javascript:uploadVariantPicture('size:'test'');

在 HTML 解析器删除外部双引号之后。

选项可以包括在值内适当地转义双引号(HTML &quot;href(这取决于 接受的语法uploadVariantPicture),包括帖子中提到的单引号之前的反斜杠转义,或者根本不使用javascript:伪协议,有利于添加JavaScript 中的事件监听器。

强烈建议不要使用javascript:伪协议 - 基本上它是 HTML3 的保留。


推荐阅读