PHP фильтр для нестандартных символов - PullRequest
2 голосов
/ 21 июня 2009

Я получаю текст как пользовательский ввод, и где-то в тексте нет стандартных символов.

Текст сохраняется в базе данных. Все в UTF-8 и работает хорошо, только он показывает странные знаки для нестандартных символов.

Как я могу отфильтровать эти символы в PHP?


Я обнаружил, что текст с неправильными символами «правильно» хранится в базе данных. Когда текст будет отображаться на статической HTML-странице в кодировке UTF-8, будут отображаться прерывистые символы. Но когда текст загружается через AJAX, он падает и операция загрузки завершается неудачно. Поэтому я думаю, что это все еще проблема кодирования AJAX.

Ответы [ 6 ]

2 голосов
/ 21 июня 2009

Юникод (и кодировки, подобные UTF-8) содержат гораздо больше символов, чем может отобразить большинство операционных систем, просто потому, что обычному пользователю не нужны все доступные символы.

Это, вероятно, означает, что у одного из ваших пользователей есть символы ввода, которые они имеют в своей системе, но у вас их нет; UTF-8 не заботится о том, что вы видите, только о том, что нужно хранить. Например, если у кого-то есть венгерское имя, например у Пола Эрдеша (обратите внимание на странные косые черты над буквой O), этот символ может быть недоступен во всех системах.

Поэтому, как говорится в другом ответе, вам может потребоваться отследить, откуда эти символы поступают, чтобы увидеть, действительно ли ваши клиенты должны их отображать или вам нужно перевести их на что-то другое.

0 голосов
/ 25 августа 2009

Вам определенно следует рассмотреть возможность изменения страницы ответов AJAX, чтобы возвращать данные в виде результата в формате XML с использованием CDATA. Тогда я почти уверен, что ты дома в безопасности.

Если вы не уверены, что такое CDATA, посмотрите здесь: http://en.wikipedia.org/wiki/Cdata

Взгляните на это для примеров, использующих PHP-объект XMLWriter: http://php.net/xmlwriter_write_cdata

0 голосов
/ 25 августа 2009

Какой «вид» AJAX вы используете и с какой библиотекой, если есть? Загружаете ли вы файлы XML или HTML для отображения или только простые строки для div.innerHTML = myRequestetContent?

Если вы используете XML, то у вас могут возникнуть другие проблемы: в кодировке XML нет кодировки (следовательно, неправильные символы) и не экранированных сущностей XML, таких как & или <или>, которые могут сделать ваш XML недействительным и, следовательно, могут сломать Функции AJAX.

Первое можно исправить, добавив правильную кодировку символов к объявлению в xml-файле, например <?xml version="1.0" encoding="UTF-8">, второе - htmlspecialcharacters в PHP.

0 голосов
/ 25 августа 2009

Я использую набор функций в PHP, чтобы проверять, преобразовывать и изменять символы в UTF-8. Я получил эти функции где-то в сети давным-давно, поэтому, к сожалению, не могу взять их на себя, но надеюсь, что они помогут.

PHP-функции для преобразования символов вокруг UTF-8

0 голосов
/ 21 июня 2009

Используйте функцию:

$htmlEntitiesString = htmlentities($inputString);

Он превратит все символы, такие как é í ä и т. Д., В объекты HTML, гарантируя, что у вас не возникнет проблем, таких как «é», превращающихся в «Á @» или что-то в этом роде.

0 голосов
/ 21 июня 2009

Эти «странные символы» могут происходить либо из-за неправильной кодировки символов (пользовательский ввод не является кодировкой UTF-8), либо из-за отсутствия глифов в шрифте, используемом для представления этих символов.

Итак, сначала вы должны найти истинную причину этих «странных персонажей».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...