[英]Despite single quotes being encoded using htmlspecialchars, JavaScript is still complaining that these quotes need to be escaped in the function call
发生了一些奇怪的事情,我很困惑。
我有一个基本上看起来像这样的链接:
<a href="javascript:uploadVariantPicture('size:'test2'');">Link</a>
如您所见,我使用参数“size:'test2'”调用 function uploadVariantPicture。
但是,当我实际单击该链接时, JavaScript 抱怨两个编码的单引号没有被转义。 我收到以下错误:
SyntaxError:意外的标识符“test2”。 预期 ')' 结束参数列表。
如果我解码两个编码的单引号并使用反斜杠对其进行转义,则 function 调用成功。 但问题是我需要对其进行编码。 我不能让它不编码并转义引号。 这不适用于我的情况。
任何帮助是极大的赞赏。 我超级困惑。
在解析源代码时,HTML 字符实体和转义被 HTML 解析器替换。 对于引号,它允许在用于引用源中的属性值的 HTML 属性中包含相同类型的引号。
例如
<element attribute=""">
<element attribute='''>
在源代码中将分别产生"
(双引号)和'
(单引号)的属性值,尽管是用于引用 HTML 源代码中的属性值的分隔符。
因此
<a href="javascript:uploadVariantPicture('size:'test2'');">Link</a>
将产生一个href
属性值
javascript:uploadVariantPicture('size:'test'');
在 HTML 解析器删除外部双引号后。
选项可以包括 escaping 双引号 (HTML "
) 在href
值内适当地(这取决于uploadVariantPicture
接受的语法),包括帖子中提到的单引号之前的反斜杠转义,或者不使用javascript:
伪协议,赞成在 JavaScript 中添加事件监听器。
不使用javascript:
强烈建议使用伪协议 - 基本上它是 HTML3 的保留。
考虑使用 JavaScript 正确附加事件处理程序,这样您就不必担心 escaping 问题,并且您不必依赖全局 ZA8CFDE6331BD59EB2AC96F8911C4B66Z 的污染来运行脚本:
const uploadVariantPicture = (arg) => console.log(arg); document.querySelector('a').addEventListener('click', () => { uploadVariantPicture("size:'test2'"); });
<a>Link</a>
我想不出内联处理程序比addEventListener
更可取的任何情况,除非您故意尝试利用 XSS 漏洞。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.