我怎样才能逃脱';'在 Javascript

How can I escape a ';' in Javascript

我正在尝试编写一个算法来替换 &<></code>、[=16= 等字符], <code>" 及其对应的 HTML 实体(即 & 将替换为 &amp;。这需要我在字符串中放置一个分号,这会产生错误因为 Javascript 认为我已经结束了这一行。这是我的代码:

str.charAt(i) = '&amp;';

我以为我可以这样取消它:

str.charAt(i) = '&amp\;';

但这会产生错误。

您不需要转义字符串中的分号。 JavaScript 并不认为该行以字符串结尾,就像它认为该行在 for (var i = 0; ...).

内结束一样

问题是您的分配无效。你似乎试图改变一个字符串,这在 JS 中是不可能的,因为字符串是不可变的。

相反,您需要创建一个新字符串,其中包含您想要用新内容替换的部分。

var new_str = s.replace(/(?:(&)|(<)|(>)|(')|("))/g, function(s, g1,g2,g3,g4,g5) {
    if (g1) return "&amp;"
    if (g2) return "&lt;"
    if (g3) return "&gt;"
    if (g4) return "&apos;"
    if (g5) return "&quot;"
});

问题不是转义问题。这是因为您试图为 String.charAt() 方法的静态输出赋值,这是不允许的。

相反,请尝试使用字符串替换方法将您的 HTML 实体替换为替代值。

s = 'Hello & World';
s.replace(/\&/g, '&amp;');

字符串文字中的分号不会终止 JavaScript 中的语句。

ReferenceError: Invalid left-hand side in assignment

您的问题是您试图为函数的 return 值赋值,这是不允许的。

如果要替换字符串中的字符,请使用 replace 方法。

在这种情况下,您尝试将文本字符串转换为 HTML 字符串,让 DOM 为您完成此操作更简单:

var div_node = document.createElement('div');
var text_node = document.createTextNode(str);
div_node.appendChild(text_node);
var str_html = div_node.innerHTML;

请注意,这不会替换 所有 个字符。有些不需要一直转义。

您可以使用函数将字符替换为 HTML 个实体:

function htmlEntities(str) {
    return String(str)
        .replace(/&/g, '&amp;')
        .replace(/</g, '&lt;')
        .replace(/>/g, '&gt;')
        .replace(/"/g, '&quot;')
        .replace(/'/g, '&apos;');
}

;不需要任何替换。