php htmlspecialchars and jquery .text()

php htmlspecialchars and jquery .text()

本文关键字:text jquery htmlspecialchars and php      更新时间:2023-09-26

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

现在在客户端,我使用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标签?有什么建议吗?我计划使用此标题文本来设置浏览器标题。谢谢

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

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

由于您使用MySQL作为引擎来存储此类数据,因此显然您使用的是PHP脚本。建议:使用PHP的strip_tag((,让PHP来做这项工作可以减少jQuery/Javascript的"工作量"。