我有这个简单的脚本:onclick='sharemusic("Say It Ain't So", "Weezer");'
由于“Is not”上的撇号,它无法正常工作。如何在不影响代码功能的情况下转义撇号?
感谢一堆!
答案 0 :(得分:5)
我不愿意添加这个答案,因为所有其他人都很好,对大多数人会更有用 - 通过回答基本问题:“如何在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#实现。
答案 1 :(得分:4)
如果你绝对必须为 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's answer中建议的HTML实体,因为它是HTML格式,或者完全不是HTML格式。否则你需要逃避可能导致问题的一切,例如: &
到\u0026
的所有实例,而不是简单地执行更具可读性的&
,与其他引用样式相同。
答案 2 :(得分:2)
您需要使用HTML实体,例如:
onclick="sharemusic("Say It Ain't So", "Weezer");"
但正如其他人所说,你可能不应该以这种方式绑定点击事件(将你的JS抽象到自己的文件并使用addEventHandler)
答案 3 :(得分:2)
这些都是非常好的答案,几乎完全依赖于代码的情况。
如果它是一次性的,其中值是硬编码的并且永远不会在页面之外使用,那么,Cobra_Fast的解决方案是最快和最简单的。
如果您的数据是从外部或动态来源输入的,但只会用于HTML显示,那么matt3141的解决方案可能最适合这种情况(即存储数据以便它可以显示在页面。
如果您的数据来自外部资源并用于HTML演示以及在外部系统中使用,那么Paul S.答案是迄今为止最便携的,因为HTML仅供HTML使用,并且可能需要翻译为外部系统。 。 。另一方面,Unicode对各种技术提供了更广泛的支持。
另外,正如Paul S.所暗示的那样。 。 。页面上JS值的任何其他“预处理”可能导致需要添加额外的编码级别。 。 。例如,"
成为"
或'Say It Ain\'t So'
成为'Say It Ain\\'t So'
(甚至'Say It Ain\\\\'t So'
,如果事情真的错综复杂的话。)
答案 4 :(得分:1)
使用以下HTML实体。
onclick='sharemusic("Say It Ain't So", "Weezer");'
答案 5 :(得分:1)
首先,使用标准描述的属性的双引号。
其次将你的JS字符串放在单引号中,并使用反斜杠转义额外的单引号。
onclick="sharemusic('Say It Ain\'t So', 'Weezer');"