使用Javascript将HTML转换为其安全实体

时间:2010-06-18 00:51:27

标签: javascript html replace html-entities

我正在尝试将<>等字符转换为&lt;&gt;等。

用户输入来自文本框,然后复制到名为changer的DIV中。

这是我的代码:

function updateChanger() {
    var message = document.getElementById('like').value;
    message = convertHTML(message);
    document.getElementById('changer').innerHTML = message;
}

function convertHTML(input)
{
    input = input.replace('<', '&lt;');
    input = input.replace('>', '&gt;');
    return input;
}

但它似乎不会替换>,而只会替换<。也试过这样:

input = input.replace('<', '&lt;').replace('>', '&gt;');

但我得到的结果相同。

有谁可以指出我在这里做错了什么?欢呼声。

2 个答案:

答案 0 :(得分:6)

更有效的方法是create an HTML text node;这样,所有其他可能无效的内容(不仅仅是&lt;和&gt;)被转换。例如:

var message = document.getElementById('like').value;
document.getElementById('changer').appendChild(document.createTextNode(message));

<强>更新

您提到您的活动在每次按键时都会触发。如果这是触发此代码的内容,则您需要在附加文本之前删除之前在div中的内容。一个简单的方法就是这样:

var message = document.getElementById('like').value;
var changer = document.getElementById('changer');
changer.innerHTML = '';
changer.appendChild(document.createTextNode(message));

答案 1 :(得分:1)

尝试这样的事情:

function convertHTML(input)
{
  input = input.replace(/>/g, '&gt;');
  input = input.replace(/</g, '&lt;');

  return input;
}

替换仅替换第一次出现的&gt;或者&lt;在字符串中,为了替换所有出现的&lt;或者&gt;,使用带有g参数的正则表达式来确保搜索整个字符串以查找所有出现的值。