5

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

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

谢谢一堆!

4

6 回答 6

10

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

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

摆脱打字机撇号 - 尽管打字机在所有复古的宏伟中都很酷和时尚,但我们可以做得更好,甚至更老:回到正确的,一刀切的印刷撇号(AKA“卷曲撇号”)。

作为副作用,这也将解决转义问题:

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

排版员会很高兴,浏览器也会很高兴。好吧,只要您按照应有的方式使用 UTF-8 - 或包含印刷撇号的其他编码。Unicode:U+2019,实体:’’(是的,它与正确的单引号共享其代码点 - 但它仍然是“正确的”撇号)。

正如评论中提到的,有各种库和 CMS/博客插件可以帮助处理转换为正确的印刷符号(和其他印刷细节)。请参阅wp-Typographysmartypants(我认为这是此类东西的第一个实现——由 Markdown 的原作者 John Gruber 开发)、typogrify等。

我不确定有什么(如果有的话)更新的替代方案,因为我很久以前就制作了自己的(非公开的,我必须承认)C# 实现。

于 2013-07-16T19:05:28.643 回答
5

如果您绝对必须为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,而不是简单地做一个更具可读性&并且与其他引用样式相同的内容。

于 2013-07-15T18:37:52.753 回答
2

您需要使用 HTML 实体,例如:

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

但正如其他人所说,您可能不应该以这种方式绑定点击事件(将您的 JS 抽象到它自己的文件中并使用addEventHandler

于 2013-07-15T18:27:03.747 回答
2

这些都是非常好的答案,几乎完全取决于您的代码环境。

如果它是一次性的,其中值是硬编码的并且永远不会在页面之外使用,那么 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',如果事情真的很复杂)。

于 2013-07-15T19:00:38.593 回答
1

使用以下 HTML 实体。

onclick='sharemusic("Say It Ain't So", "Weezer");'
于 2013-07-15T18:27:09.007 回答
1

首先,使用标准描述的属性双引号。

其次,将您的 JS 字符串放在单引号中,并用反斜杠转义多余的单引号。

onclick="sharemusic('Say It Ain\'t So', 'Weezer');"
于 2013-07-15T18:46:11.130 回答