php htmlspecialchars和jquery .text()

时间:2013-05-17 12:40:16

标签: php javascript jquery

我最近遇到了一个问题。我有一个用户可以发布内容的系统。其中一个字段是标题字段。因此,为了安全地保存用户输入,我在用户提交的标题上使用htmlspecialchars并将其发送到一个函数,然后保存到数据库(使用mysql_real_escape之后)

现在在客户端我使用json获取此标题

$.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标签?有什么建议?我打算使用此标题文本来设置浏览器标题。感谢。

2 个答案:

答案 0 :(得分:1)

document.title = $('<div />').append( $('<div />').html( title ).text() ).text();

将字符串附加两次应解决htmlentities问题。

答案 1 :(得分:0)

由于您使用MySQL作为存储此类数据的引擎,因此您显然正在使用PHP脚本。建议:使用PHP的strip_tag(),你可以通过让PHP完成工作来减少jQuery / Javascript的“工作量”。