Как добиться правильного поведения с помощью HTML Purifier?
-
22-08-2019 - |
Вопрос
Я использую Очиститель HTML в моем PHP-проекте и у меня возникли проблемы с тем, чтобы заставить его правильно работать с пользовательским вводом.
Я заставляю пользователей вводить текст в HTML с помощью редактора WYSIWYG (Крошечный кусочек), но всякий раз, когда пользователь вводит в HTML-объект
(неразрывный пробел) он сохраняется в базе данных как этот странный иностранный символ (Â
).
Однако дело в том, что когда я редактирую сохраненную запись с помощью редактора WYSIWYG, она отображается должным образом в виде
.Он также работает должным образом при отображении, только в исходном коде он отображается как реальный пробел, но не как неразрывный символ пробела.
Кроме того, в базе данных MySQL он отображается как странный иностранный символ.
Я читал документ о Очиститель Unicode и HTML и изменил кодировку моей базы данных и веб-страницы на UTF-8, но у меня все еще возникают проблемы с тем, что неразрывный пробел не искажается.Другие HTML-объекты, такие как <
и >
, быть сохраненным как <
и >
, но почему бы и нет
?
Решение
Неразрывный пробел не сохраняется в вашей базе данных в виде одного странного иностранного символа, он сохраняется как два Персонажи.Неразрывный пробел в Юникоде кодируется в UTF-8 как 0xC2 0xA0
, который в ISO-8859-1 выглядит как "Â " (т.е.странный иностранный символ, за которым следует неразрывный пробел).
Вы, вероятно, забываете сделать SET NAMES 'utf8'
при подключении к вашей базе данных, что заставляет PHP отправлять свои данные в MySQL как ISO-8859-1 (по умолчанию).
Взгляните на "UTF-8 на всем протяжении…" чтобы узнать, как правильно настроить UTF-8 при использовании PHP и MySQL.
Другие советы
Это также может помочь вам узнать, что  
является альтернативой для
который вам, скорее всего, потребуется, если вы когда-нибудь выведете какой-либо удобочитаемый XML ;)