Javascript如何在字符串文字

时间:2015-08-24 08:16:21

标签: javascript unicode escaping backslash

奇怪的事情......

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

实施例

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

某处的字符串包含一个反斜杠后跟一个字符。 在这一点上逃避反斜杠已经太晚了,所以我必须单独逃避这些特殊字符,如

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

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

var username = "MYDOMAIN\ulrike";

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

是否有人建议或解决如何转义包含在给定字符串文字中的非Unicode字符序列?在" MYDOMAIN \ bernd"中似乎与\ b类似的问题。

2 个答案:

答案 0 :(得分:1)

  

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

假设你没有任何<或者>,将其移动到HTML控件(而不是脚本块内)或元素内部,并使用Javacript读取值。像

这样的东西
<div id="myServerData">
   MYDOMAIN\tom
</div>

然后你检索它

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

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

注入它

答案 1 :(得分:1)

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

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

有类似的东西:

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

然后执行document.getElementById("demo").innerHTML = username;

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

的值

我想这应该可行。

重要提示:请确保不会将网页公开给脚本注入。如果是这样,这种方法很糟糕,不要使用它。