【问题标题】:How should I enter a Unicode character in CSS now that octal escapes are deprecated?既然八进制转义已被弃用,我应该如何在 CSS 中输入 Unicode 字符?
【发布时间】:2014-06-16 10:14:47
【问题描述】:

我正在使用 JavaScript 添加 CSS 样式(特别是使用 GreaseMonkey 的 GM_addStyle)。

我想在 CSS 属性中添加一个 Unicode 字符。我见过很多像this one 这样的问题,答案似乎总是类似于

#target:before {
    content: "\2611";
}

现在,正如我所说,这种样式在GM_addStyle 中指定,并且调用函数启用了严格模式。当我的脚本运行时,我在控制台上收到错误消息octal literals and octal escape sequences are deprecated

我认为这里的冲突是在 JavaScript 中进行操作(即将 Unicode 字符放入 JavaScript 字符串)和 CSS 中的操作(在声明 CSS 属性时转义字符)之间的冲突。我应该使用什么语法来使字符转义而不产生错误?

【问题讨论】:

  • 您的问题令人困惑 - 您指的是 JavaScript 还是 CSS,或两者兼而有之?据我所知,CSS 中的转义序列从未被任何规范弃用。
  • 我认为我的困惑是根本问题。我正在使用 GM_addStyle 添加 CSS 样式定义;我认为这实际上是在使用 JavaScript 编写新的 <style> 标签。因此,十六进制/八进制 -> Unicode 字符转换实际上是在解释 JavaScript 字符串时发生的。这就是为什么保罗的回答是正确的。
  • CSS 从来没有“八进制转义序列”。这里涉及到真正的问题,但它似乎与 JavaScript 相关,而不是 CSS。恐怕它表达得如此混乱,以至于这个问题对未来的访问者几乎没有用处。
  • 我认为你是对的,Jukka;我将添加一个后记以尝试澄清。
  • 另外,如果有人在我下面的评论中错过了它,我想提高this article on JavaScript string escapes 的知名度,这确实有助于理顺我。

标签: javascript css escaping strict


【解决方案1】:

我正在尝试在 GreaseMonkey 中执行此操作,并启用了严格模式。

如果您要通过 JavaScript,那么 String '\2611' 的含义与您认为的不同,您可能想要 字符串 '\u2611''\\2611'

'\2611';  // "±1"
'\u2611'; // "☑"
'\\2611'; // "\2611"

【讨论】:

  • FWIW,第一个相当于\u00b11,即Unicode字符00b1"1"
  • @lc。是的,对于任何对如何转换第一个输出感兴趣的人,因为它不是一个简单的 oct -> hex '\261'.charCodeAt(0).toString(16); // "b1" 然后通过在前面加上 "0"s 来使这 4 位数字变长
  • 当您发布此内容时,我正在阅读 an excellent article,它解释了差异。现在更有意义了。谢谢!
猜你喜欢
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
相关资源
最近更新 更多