javascript - 尽管使用 htmlspecialchars 对单引号进行编码,JavaScript 仍然抱怨这些引号需要在函数调用中转义
问题描述
发生了一些奇怪的事情,我很困惑。
我有一个基本上看起来像这样的链接:
<a href="javascript:uploadVariantPicture('size:'test2'');">Link</a>
如您所见,我正在使用参数“size:'test2'”调用函数uploadVariantPicture。
但是,当我实际单击该链接时,JavaScript 抱怨两个编码的单引号没有被转义。我收到以下错误:
SyntaxError:意外的标识符“test2”。预期 ')' 结束参数列表。
如果我解码两个编码的单引号并使用反斜杠对其进行转义,则函数调用成功。但问题是我需要对其进行编码。我不能让它不编码并转义引号。这不适用于我的情况。
任何帮助是极大的赞赏。我超级困惑。
解决方案
HTML 字符实体和转义符在解析源代码时被 HTML 解析器替换。对于引号,它允许在用于引用源中的属性值的 HTML 属性中包含相同类型的引号。
例如
<element attribute=""">
<element attribute='''>
在源代码中会分别产生"
(双引号) 和'
(单引号) 的属性值,尽管是用于在 HTML 源代码中引用属性值的分隔符。
因此
<a href="javascript:uploadVariantPicture('size:'test2'');">Link</a>
将产生一个href
属性值
javascript:uploadVariantPicture('size:'test'');
在 HTML 解析器删除外部双引号之后。
选项可以包括在值内适当地转义双引号(HTML "
)href
(这取决于 接受的语法uploadVariantPicture
),包括帖子中提到的单引号之前的反斜杠转义,或者根本不使用javascript:
伪协议,有利于添加JavaScript 中的事件监听器。
强烈建议不要使用javascript:
伪协议 - 基本上它是 HTML3 的保留。
推荐阅读
- r - 错误:未使用的参数 (alist(, drop = FALSE)),R Shiny 应用程序。我是否错误地索引了函数?
- java - getElementsByTagName 返回零而不是 null 为什么
- css - @emotion/styled 用于 antd 菜单中由 className 定位的元素
- python - 调用 Google Data QnA API 时 Django 中出现 503 DNS 服务不可用错误
- api - Laravel 自定义路由文件不适用于新路由
- spring-boot - Jpa ManyToMany 连接表更新
- azure-blob-storage - Kusto\KQL - 为简单计数值渲染时间图
- c++ - .so 名称冲突的 C++/CMake 可安装库
- python - pyinstaller --onefile 参数不适用于 pygame
- asp.net-core - SqlKata如何从列表中插入许多值