我怎么能逃脱';'在Javascript中

时间:2015-11-16 16:57:03

标签: javascript html html-entities

我正在尝试编写一种算法来替换import org.openqa.selenium.WebDriver; import org.openqa.selenium.phantomjs.PhantomJSDriver; public class test { public static void main(String[] args) { // TODO Auto-generated method stub WebDriver[] drivers = new WebDriver[5]; try{ for (int i = 0; i < drivers.length; i++){ drivers[i] = new PhantomJSDriver(); } System.out.println("End the program now"); drivers[0].get("http://www.bbc.co.uk"); } finally { for (int i = 0; i < drivers.length; i++){ WebDriver driver = drivers[i]; driver.close(); driver.quit(); driver = null; } } } } &<>'等字符与他们的HTML实体对应(即"将替换为&。这要求我在字符串中放置一个分号,这会产生错误,因为Javascript认为我已经结束了这一行。是我的代码:

&amp;

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

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

但这会产生错误。

5 个答案:

答案 0 :(得分:4)

问题是您的作业无效。你似乎试图改变一个字符串,这在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;"
});

答案 1 :(得分:3)

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

  

ReferenceError:赋值中的左侧无效

您的问题是您正在尝试为函数的返回值赋值,这是不允许的。

如果要替换字符串中的字符,请使用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;

请注意,这不会替换所有字符。有些人不需要一直逃脱。

答案 2 :(得分:2)

你不需要在字符串内转义分号。 JavaScript并不认为该行以字符串形式结束,而不是认为该行在for (var i = 0; ...)内结束。

答案 3 :(得分:2)

问题不是逃避问题。您尝试将值分配给String.charAt()方法的静态输出,这是不允许的。

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

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

答案 4 :(得分:2)

您可以使用函数通过HTML实体替换字符:

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

;不需要替换。