1

我最近遇到了一个问题。我有一个用户可以发布内容的系统。其中一个字段是标题字段。因此,为了安全地保存用户输入,我在用户提交的标题上使用 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);

但是,这会立即引发错误。在铬它说

Uncaught Error: Syntax error, unrecognized expression ...

所以我验证了这个标题变量是否是一个字符串。它确实是一个字符串。(顺便说一句,如果此变量仅包含数字,则由于某种原因没有错误)

但是,使用以下内容会为我提供文本,但不会删除标签

var cleanTitle = $.parseHTML(title);
cleanTitle = $(cleanTitle).text();
alert(cleanTitle);

这输出

<script>alert('')</script>Some Text!

如何删除所有 html 标签?有什么建议么?我打算使用这个标题文本来设置浏览器标题。谢谢。

4

2 回答 2

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

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

于 2013-05-17T12:57:37.007 回答
0

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

于 2013-05-17T12:52:31.367 回答