Как заставить & nbsp вести себя правильно, используя HTML Purifier? - PullRequest
3 голосов
/ 19 декабря 2008

Я использую HTML Purifier в своем проекте PHP, и у меня возникают проблемы с его корректной работой с пользовательским вводом.

У меня есть пользователи, которые вводят в HTML с помощью редактора WYSIWYG ( TinyMCE ), но всякий раз, когда пользователь вводит в сущность HTML   (неразрывный пробел), он сохраняется в базе данных, как это странный иностранный символ (Â).

Однако дело в том, что когда я редактирую сохраненную запись с помощью редактора WYSIWYG, она отображается правильно как  . Он также работает правильно при отображении, только в исходном коде он выглядит как реальный пробел, но не как символ неразрывного пробела.

Кроме того, в базе данных MySQL он отображается как странный иностранный символ.

Я прочитал документ о Unicode и HTML Purifier и изменил кодировку своей базы данных и веб-страниц на UTF-8, но у меня все еще есть проблемы с тем, что неразрывный пробел не искажается. Другие объекты HTML, такие как &lt; и &gt;, сохраняются как < и >, но почему бы не &nbsp;?

Ответы [ 2 ]

3 голосов
/ 19 декабря 2008

Неразрывный пробел не сохраняется в вашей базе данных как один странный иностранный символ, он сохраняется как два символа. Символ неразрывного пробела Unicode кодируется в UTF-8 как 0xC2 0xA0, что в ISO-8859-1 выглядит как «В» (то есть странный внешний символ, за которым следует неразрывный пробел).

Вы, вероятно, забыли сделать SET NAMES 'utf8' для подключения к базе данных, что заставляет PHP отправлять свои данные в MySQL как ISO-8859-1 (по умолчанию).

Просмотрите " UTF-8 на всем пути до ... ", чтобы узнать, как правильно настроить UTF-8 при использовании PHP и MySQL.

0 голосов
/ 19 декабря 2008

Это также может помочь вам узнать, что &#160; является альтернативой для &nbsp;, которая вам, вероятно, понадобится, если вы когда-либо выводите какой-либо читаемый человеком XML;)

...