我在PHP项目中使用HTML Purifier,但无法使其与用户输入一起正常工作.
我让用户使用WYSIWYG编辑器(TinyMCE)输入HTML,但是每当用户输入HTML实体& nbsp; (不间断空格)作为奇怪的外来字符(Â)被保存到数据库中.
但是,事实是,当我使用WYSIWYG编辑器编辑保存的条目时,它会正确显示为& nbsp;.它在显示时也可以正常运行,只是在源代码中显示为真实空格,而不是不间断空格.
另外,在MySQL数据库中,它显示为奇怪的外来字符.
我阅读了有关Unicode and HTML Purifier的文档,并将数据库和网页编码更改为UTF-8,但仍无法解决不间断空格字符的问题.其他HTML实体,例如& lt;和& gt;保存为<和> ;,为什么不& nbsp ;?
解决方法:
不间断空格不会作为一个奇怪的外来字符保存在数据库中,而是另存为两个字符. Unicode不间断空格字符在UTF-8中编码为0xC2 0xA0,在ISO-8859-1中看起来像是“”(即一个奇怪的外来字符,后跟一个不间断空格).
您可能会忘记在数据库连接上执行SET NAMES’utf8′,这会使PHP以ISO-8859-1(默认值)的形式将其数据发送到MySQL.
看看“ UTF-8 all the way through…”,了解如何在使用PHP和MySQL时正确设置UTF-8.