我最近遇到了一个问题。我有一个用户可以发布内容的系统。其中一个字段是标题字段。因此,为了安全地保存用户输入,我在用户提交的标题上使用 htmlspecialchars 并将其发送到一个函数,然后保存到数据库(使用 mysql_real_escape 之后)
现在在客户端我使用 json get 来获取这个标题
$.getJSON("PHPFILE", function(json) {
// let's say json.title is the title we need so...
var title = json.title;
}
现在的问题是,这个用户给定的标题值可以包含任何内容,甚至是 html 标签(作为引用,我们假设它现在包含
<script>alert('');</script>Some Text!
因此,由于我使用 jquery,我想到使用 .text() 函数清除那些
var cleanTitle = $(title).text();
alert(cleanTitle);
但是这会立即引发错误。在 Chrome 中它说
Uncaught Error: Syntax error, unrecognized expression ...
所以我验证了这个 title 变量是否是一个字符串。它确实是一个字符串。 (顺便说一句,由于某种原因,如果该变量仅包含数字,则不会出现错误)
使用以下内容可以给我文本,但标签不会被删除
var cleanTitle = $.parseHTML(title);
cleanTitle = $(cleanTitle).text();
alert(cleanTitle);
此输出
<script>alert('')</script>Some Text!
如何删除所有 html 标签?有什么建议么?我计划使用此标题文本来设置浏览器标题。谢谢。
最佳答案
document.title = $('<div />').append( $('<div />').html( title ).text() ).text();
附加字符串两次应该可以解决 htmlentities 问题。
关于php htmlspecialchars 和 jquery .text(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16609294/