0

我想使用 ajax 从我的服务器向我的网页添加一些文本,但这些文本包含一些 html 标签,并且浏览器倾向于解析该代码并呈现它。我不想要这种行为,我想在不解析 html 标签的情况下附加该文本。有没有办法做到这一点?

4

3 回答 3

2

您必须对返回的“HTML”进行编码。基本上你必须替换<,>&,&lt;和.&gt;&amp;

例如,如果您在服务器端使用 PHP,则可以使用htmlspecialchars()- 可能有类似的函数或方法可用于其他语言(python 的cgi.escape 、Perl的HTML:EntitiesSystem.Web.HttpUtility.HtmlEncode asp.net ...)。

如果您在看起来像这样的重新调整的字符串上执行此操作

this is <strong>bold</strong> text

在您的浏览器中显示为

这是粗体

您的输出将更改为

this is &lt;strong&gt;bold&lt;/strong&gt; text

将显示为

这是<strong>粗体</strong>文字

于 2012-05-29T17:47:26.433 回答
2

使用node.textContent属性(IE<=8 上的 element.innerText)将文本内容分配给元素。浏览器会将所有特殊字符编码到相应的 HTML 实体中:

var h1 = document.getElementsByTagName("h1")[0];
if (typeof h1.textContent != "undefined") {
    h1.textContent = "<b>Hello World</b>";
}
else if (typeof h1.innerText != "undefined") {
    h1.innerText = "<b>Hello World</b>";
}
alert(h1.innerHTML);​
// at this point, the h1 tag will "render" <b>Hello World</b>
// not the text Hello World in bold face
// inspecting the element will reveal that html tags, e.g. <b>
// were converted to &lt;b&gt;

演示

于 2012-05-29T17:55:59.613 回答
0

在浏览器端的 javascript 中:

function htmlEncode( str )  {
    str = str + "";
    var el = document.createElement("div");
    el.appendChild( document.createTextNode( str ) );
    return el.innerHTML;
}

htmlEncode( "<div></div>" );
//"&lt;div&gt;&lt;/div&gt;"
于 2012-05-29T17:55:13.967 回答