逃避撇号

时间:2013-07-15 18:23:13

标签: javascript html

我有这个简单的脚本:onclick='sharemusic("Say It Ain't So", "Weezer");'

由于“Is not”上的撇号,它无法正常工作。如何在不影响代码功能的情况下转义撇号?

感谢一堆!

6 个答案:

答案 0 :(得分:5)

我不愿意添加这个答案,因为所有其他人都很好,对大多数人会更有用 - 通过回答基本问题:“如何在HTML属性中的Javascript中逃避” - 这不会回答这个问题。

有些人会考虑以下方法,其他人会将其视为唯一合适的解决方案™。

摆脱打字机撇号 - 虽然打字机在所有的复古气质中都很酷且时尚,但我们可以做得更好,甚至更老:回到适当的,一刀切的印刷撇号(AKA) “卷曲的撇号”)。

作为副作用,这也将解决逃避问题:

onclick="sharemusic('Say It Ain’t So', 'Weezer');"

排版员会很开心,浏览器会很开心。好吧,只要你像你应该使用UTF-8一样 - 或者包含印刷撇号的其他编码。 Unicode:U + 2019,实体:’’(是的,它与正确的单引号共享其代码点 - 但它仍然是“正确的”撇号)。

正如评论中所提到的,有各种库和CMS /博客插件可以帮助处理转换为正确的印刷符号(和其他印刷细节)。请参阅wp-Typographysmartypants(我认为,这是第一次实现此类内容 - 由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');"