我想使用 ajax 从我的服务器向我的网页添加一些文本,但这些文本包含一些 html 标签,并且浏览器倾向于解析该代码并呈现它。我不想要这种行为,我想在不解析 html 标签的情况下附加该文本。有没有办法做到这一点?
问问题
622 次
3 回答
2
您必须对返回的“HTML”进行编码。基本上你必须替换<
,>
和&
,<
和.>
&
例如,如果您在服务器端使用 PHP,则可以使用htmlspecialchars()
- 可能有类似的函数或方法可用于其他语言(python 的cgi.escape 、Perl的HTML:Entities、System.Web.HttpUtility.HtmlEncode asp.net ...)。
如果您在看起来像这样的重新调整的字符串上执行此操作
this is <strong>bold</strong> text
在您的浏览器中显示为
这是粗体字
您的输出将更改为
this is <strong>bold</strong> 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 <b>
演示
于 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>" );
//"<div></div>"
于 2012-05-29T17:55:13.967 回答