php htmlspecialchars 和 jquery .text()

标签 php javascript jquery

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

相关文章:

JavaScript/jQuery 检测 div 是否包含不包括子项的文本

javascript - jquery ajax无法循环遍历找到的数据

php - Symfony2 - 查找器组件

php - 从多个表中提取 SQL 数据

php - 如何从 ajax 调用获取图表数据到 javascript

javascript - 为什么这些 Javascript 函数会产生不同的结果?

javascript - aa数据表中的排序无法正常工作

php - Intellisense 在带有 MYSQL 的 Visual Studio Code 中无法正常工作

javascript - 通过 JQuery 运行外部 php mysql 查询时出错

javascript - SPARQL 查询从 SPARQL 查询验证器中获取错误,但在 Virtuoso SPARQL 查询编辑器中工作