【问题标题】:Escaping apostrophe转义撇号
【发布时间】:2013-07-13 17:24:07
【问题描述】:

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

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

非常感谢!

【问题讨论】:

  • 不要以这种方式绑定你的处理程序,你可以完全避免这个问题!
  • 在您的问题中,您已经用反斜杠转义了撇号,这不起作用吗?
  • 告诉我一个很好的理由为什么你需要用单引号绑定它。
  • stackoverflow.com/questions/12182121/… 可能有助于将字符串文字转义以传递到 JavaScript。
  • 另一种选择 - 您可以使用适当的撇号而不是混蛋打字机撇号。 onclick="sharemusic('Say It Ain’t So', 'Weezer');" 可以正常工作。 ;-)

标签: javascript html


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

  • 感谢发帖:)
  • 正如我在 cmets 中所说,这个答案很棒。是的,我知道这不是最好的方法,但它对我正在尝试做的事情 100% 有效。谢谢,芽:)
【解决方案2】:

如果你绝对必须为 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 的所有实例,而不是简单地做一个更具可读性的 & 和其他引用样式相同。

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 我知道这可以做到,我只是想知道我是否可以在不转换实体的情况下做到这一点。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      使用以下 HTML 实体。

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

      【讨论】:

        【解决方案6】:

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

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

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

        【讨论】:

        • 虽然我也更喜欢属性的双引号,但标准并没有描述它。 HTML、XHTML 和 XML 的所有规范和建议都允许使用单引号。
        猜你喜欢
        • 2015-08-27
        • 2016-03-23
        • 2018-08-26
        • 2018-09-21
        • 2011-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多