【问题标题】:Javascript How to escape \u in string literalJavascript如何在字符串文字中转义\u
【发布时间】:2015-11-17 14:10:49
【问题描述】:

奇怪的东西……

我有一个字符串文字,它作为常量标记传递给我的源代码(我无法预先处理或转义它)。

例子

var username = "MYDOMAIN\tom";
username = username.replace('MYDOMAIN','');

某处的字符串包含一个反斜杠,后跟一个字符。 此时转义反斜杠为时已晚,所以我必须单独转义这些特殊字符,例如

username = username.replace(/\t/ig, 't');

但是,这在以下情况下不起作用:

var username = "MYDOMAIN\ulrike";

\u 似乎引入了一个 unicode 字符序列。 \uLRIK 不能被解释为 unicode 符号,因此 Javascript 引擎此时停止解释,而我的 replace(/\u/ig,'u') 来得太晚了。

有没有人建议或解决如何转义给定字符串文字中包含的这种非 unicode 字符序列?与“MYDOMAIN\bernd”中的 \b 类似的问题。

【问题讨论】:

  • 您提供了将非法字符传递到字符串的范围。并非所有字符都可以这样转义,因此需要更改生成这些字符串的任何内容
  • Javascript 会将 \ulrike 视为无效的 Unicode 转义序列。数据需要在到达 js var 之前进行转义。

标签: javascript unicode escaping backslash


【解决方案1】:

我有一个传递给我的源代码的字符串文字

假设您没有任何 ,请将其移动到 HTML 控件(而不是脚本块内)或元素内,然后使用 Javacript 读取值。类似的东西

<div id="myServerData">
   MYDOMAIN\tom
</div>

然后你就这样检索它

alert(document.getElementById("myServerData").innerText);

重要:注入未转义的内容,用户可以控制内容(比如这是在其他页面中输入的数据)是一种安全风险。这适用于您是在脚本还是 HTML 中注入它

【讨论】:

    【解决方案2】:

    编写var username = "MYDOMAIN\ulrike"; 将引发语法错误。我想你有这个字符串来自某个地方。

    我建议创建一些 html 元素并将其 innerHTML 设置为接收到的值,然后将其拾取。

    有类似的东西:

    <div id="demo"></div>
    

    那就document.getElementById("demo").innerHTML = username;

    然后从那里读取值document.getElementById("demo").innerHTML;

    我猜这应该可行。

    重要提示:请确保这不会将网页暴露给脚本注入。如果有,这个方法不好,不要用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 2020-02-24
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      相关资源
      最近更新 更多