我在PHP项目中使用HTML Purifier,但在使用用户输入时无法正常使用。
我让用户使用WYSIWYG编辑器(TinyMCE)输入HTML,但每当用户输入HTML实体
(不间断空格)时,它就会被保存到数据库中怪异的外国人(Â
)。
但是,当我使用WYSIWYG编辑器编辑保存的条目时,它会正确显示为
。它在显示时也能正常运行,只在源代码中显示为真实空间,而不是不间断的空格字符。
此外,在MySQL数据库中,它显示为奇怪的外来字符。
我阅读了关于Unicode and HTML Purifier的文档,并将我的数据库和网页编码更改为UTF-8,但我仍然遇到没有破坏空间字符的问题。其他HTML实体(例如<
和>
)将保存为<
和>
,但为什么不
?
答案 0 :(得分:3)
不间断的空间没有作为一个奇怪的外来字符保存在您的数据库中,它被保存为两个字符。 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。
答案 1 :(得分:0)
它还可以帮助您了解 
是
的替代,如果您输出任何人类可读的XML,您可能需要它;)