DOM字符串在Javascript中没有转义

时间:2017-07-14 15:21:35

标签: javascript html

例如;



var text = document.getElementById("escape").innerHTML;
alert(text);
text = "hello my name is \n cool";
alert(text);

<p id="escape">hello my name is \n cool</p>
&#13;
&#13;
&#13;

在第一次警报期间,警报内的文字显示为

hello my name is \n cool

但是在第二次它变成

hello my name is 
cool

如何将第一个警报显示为第二个?

4 个答案:

答案 0 :(得分:2)

应该使用textarea而不要使用\ n,只需按Enter键即可创建新行。

<textarea id="escape">
hello my name is
cool
</textarea>

因为p或div标签将返回原始字符串,\将作为\\

进行转义

答案 1 :(得分:1)

JavaScript中包含'is \n cool'的字符串可以表示为字符列表:

["i", "s", " ", "↵", " ", "c", "o", "o", "l"]
                ^^^ newline character

请注意,即使字符串似乎包含反斜杠和n字符,字符串的实际也不会。这是因为\n是一个转义序列,它被评估为一个换行符。

阅读包含文字文本is \n cool的HTML的文本内容,最终会得到一个可以表示为字符列表的字符串:

["i", "s", " ", "\", "n", " ", "c", "o", "o", "l"]
                ^^^  ^^^
                 |    +- n character
                 +------ backslash character

注意字符串在这里如何包含反斜杠和n字符。 \n不是HTML中的转义序列,因此字符保留其值。

如果您希望HTML包含与JavaScript字符串相同的值,则需要包含相同的换行符 正确编码为HTML

这可以通过文字换行符来完成:

<div>is 
 cool</div>

或者可以使用HTML编码的换行符来完成:

<div>is &#10; cool</div>

请注意即使字符串似乎包含&#10;字符,实际的值字符串。这是因为&#10;是一个HTML实体,被评估为单个换行符。

答案 2 :(得分:0)

您要问的是如何将字符串值解释为JavaScript字符串文字。将字符串解释为JavaScript的方法是(邪恶的)eval,如果你足够小心的话可以在这里使用:

function interpretJSString(value) {
    return value
        .split('"')
        .map(function (v) {
            return eval('"' + v + '"');
        })
        .join('"');
}

var text = document.getElementById("escape").innerHTML;

var interpretedText = interpretJSString(text);
alert(interpretedText);
<p id="escape">hello my "name" is \n \tcool</p>

唯一不能处理的转义序列是\",因为它需要额外的预防措施来防止值中的任何" s突破字符串并造成破坏。

答案 3 :(得分:-1)

将第一个text替换为text.replace("\\n", "\n")

fiddle