PHP:html_entity_decode 删除/不显示字符

标签 php utf-8 html-entities html-encode

我的网站上存在字符问题。

我有一个网站,用户可以使用所见即所得编辑器 (ckeditor) 来填写他们的个人资料。内容在放入数据库之前通过 htmlpurify 运行(出于安全原因)。

数据库的所有表均设置为 UTF-8 字符集。我还在脚本执行开始时调用“SET NAMES utf-8”以防止出现问题(这已经工作了很多年,因为我已经很长时间没有遇到这个问题了)。显示文本的网页的内容类型为 utf-8,我还使用 header() 函数来设置内容类型和字符集。

显示文本时一切似乎都很好,直到我尝试在内容上运行正则表达式。 html_entity_decode (使用“utf-8”的编码参数调用)由于某种原因正在删除/不显示 Â 字符,并且它留下了导致我所有正则表达式失败的东西(似乎那里有一个字符,但我不能在源代码中查看它)。

如何防止和/或删除此字符以便我可以运行正则表达式?

编辑:我决定放弃 ckeditor 并使用本网站使用的 Markdown 格式,以获得更大的灵活性。从我记事起,我就讨厌所见即所得的编辑器。将所有配置文件更新为新格式将使我有机会删除所有有问题的文本,并给网站一个干净的开始。感谢您的所有意见。

最佳答案

您可能面临这样的情况:字符串实际上没有正确编码(正如您所写的那样,但事实并非如此)。然后,html_entity_decode 可能会使用替换字符删除任何无效的 UTF-8 字节序列(例如 · 的单字节字符集编码)。

根据您使用的 PHP 版本,您可以通过使用标志来更好地控制如何处理此问题。

此外,要查找您看不到的字符,请创建一个 hexdump of the string

关于PHP:html_entity_decode 删除/不显示字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10128675/

相关文章:

javascript - PHP 在单选按钮上将单选值发布到下一页

php - 使用php在postgresql中选择

php - Symfony2 - Doctrine2 QueryBuilder WHERE IN ManyToMany 字段

c++ - 什么是用于 C++ UTF-8/UTF-16 文本编码的小型 LGPL 库?

jquery html() 默认解码 html 实体?

html-entities - 我可以在 HTML 中声明我自己的命名实体吗?

php - Laravel 模型,全局过滤器

python - Python 3 中 for 循环的数据类型和文档

iOS 原生中文编码 QRCode 扫描器

html - 带有 HTML 的无穷大符号