我有这个简单的脚本:onclick='sharemusic("Say It Ain't So", "Weezer");'
由于“不是”上的撇号,它无法正常工作。如何在不影响代码功能的情况下转义撇号?
谢谢一堆!
我有这个简单的脚本:onclick='sharemusic("Say It Ain't So", "Weezer");'
由于“不是”上的撇号,它无法正常工作。如何在不影响代码功能的情况下转义撇号?
谢谢一堆!
我不愿意添加这个答案,因为所有其他人都很好,并且对大多数人来说会更有用 - 通过回答基本问题:“如何在 HTML 属性中的 Javascript 中转义” - 这不会回答这个问题。
有些人会考虑以下解决方法,其他人会将其视为唯一合适的解决方案™。
摆脱打字机撇号 - 尽管打字机在所有复古的宏伟中都很酷和时尚,但我们可以做得更好,甚至更老:回到正确的,一刀切的印刷撇号(AKA“卷曲撇号”)。
作为副作用,这也将解决转义问题:
onclick="sharemusic('Say It Ain’t So', 'Weezer');"
排版员会很高兴,浏览器也会很高兴。好吧,只要您按照应有的方式使用 UTF-8 - 或包含印刷撇号的其他编码。Unicode:U+2019,实体:’
或’
(是的,它与正确的单引号共享其代码点 - 但它仍然是“正确的”撇号)。
正如评论中提到的,有各种库和 CMS/博客插件可以帮助处理转换为正确的印刷符号(和其他印刷细节)。请参阅wp-Typography、smartypants(我认为这是此类东西的第一个实现——由 Markdown 的原作者 John Gruber 开发)、typogrify等。
我不确定有什么(如果有的话)更新的替代方案,因为我很久以前就制作了自己的(非公开的,我必须承认)C# 实现。
如果您绝对必须为JavaScript转义它,而不是 HTML 实体,您可以用它的 Unicode 表示形式编写它
"\u0027" // "'"
"Say It Ain\u0027t So" // "Say It Ain't So"
您可以通过以下方式计算出 unicode 表示形式是什么
"'".charCodeAt(0) // 39
.toString(16) // "27"
// So pad 27 to 4 digits, then prepend \u
在使用 HTML 时,最好按照MrJammin 的回答中的建议使用 HTML 实体,因为它位于 HTML 中,或者将其完全移出 HTML。否则,您将需要转义可能导致问题的所有内容,例如&
to的所有实例\u0026
,而不是简单地做一个更具可读性&
并且与其他引用样式相同的内容。
您需要使用 HTML 实体,例如:
onclick="sharemusic("Say It Ain't So", "Weezer");"
但正如其他人所说,您可能不应该以这种方式绑定点击事件(将您的 JS 抽象到它自己的文件中并使用addEventHandler)
这些都是非常好的答案,几乎完全取决于您的代码环境。
如果它是一次性的,其中值是硬编码的并且永远不会在页面之外使用,那么 Cobra_Fast 的解决方案是最快和最简单的。
如果您的数据是从外部或动态源输入的,但只会用于 HTML 显示,那么 matt3141 的解决方案可能最适合这种情况(即,存储数据以便准备好在页面上显示。
如果您的数据来自外部源并用于 HTML 演示以及在外部系统中使用,那么 Paul S. answer 是迄今为止最便携的,因为 HTML 仅供 HTML 使用,并且可能需要为外部系统翻译。. . 另一方面,Unicode 对跨技术有更广泛的支持。
此外,正如 Paul S. 所暗示的那样。. . 页面上 JS 值的任何额外“预处理”都可能导致需要添加额外的编码级别。. . 例如,"
成为"
或'Say It Ain\'t So'
成为'Say It Ain\\'t So'
(甚至'Say It Ain\\\\'t So'
,如果事情真的很复杂)。
使用以下 HTML 实体。
onclick='sharemusic("Say It Ain't So", "Weezer");'
首先,使用标准描述的属性双引号。
其次,将您的 JS 字符串放在单引号中,并用反斜杠转义多余的单引号。
onclick="sharemusic('Say It Ain\'t So', 'Weezer');"