Преобразование специальных символов в PHP - PullRequest
3 голосов
/ 30 июня 2009

Я уже пробовал много функций, но я просто не могу понять это. Во всяком случае, правильный путь.

В поле формы под названием description я могу ожидать всевозможные символы. Они должны быть отформатированы в HTML-сущности перед отправкой в ​​базу данных.

Теперь мой код:

$formdesc = htmlentities($_POST['formdesc'], ENT_QUOTES);

Для запроса MySQL я просто добавляю «безопасную» функцию для удаления «из строки»:

mysql_real_escape_string($formdesc);

Однако иногда это не работает. Например, «é» становится & Atilde; & copy; вместо & eacute;.

Для этого должна быть нормальная функция. Кто-нибудь знает, что я имею в виду?

Ответы [ 3 ]

13 голосов
/ 30 июня 2009

Вам необходимо указать кодировку для функции htmlentities (здесь UTF-8):

$formdesc = htmlentities($_POST['formdesc'], ENT_QUOTES, 'UTF-8');

В противном случае используется значение по умолчанию ISO-8859-1, а символ é в вашем примере, закодированный в UTF-8 как 0xC3A9, будет интерпретироваться как два символа (Ã и ©).

Но почему вы все равно используете htmlentities? Если вы просто хотите экранировать специальные символы HTML, такие как &, <, >, " и ' htmlspecialchars, то будет достаточно.

1 голос
/ 30 июня 2009

Похоже, обычные экранирующие функции PHP не работают с текстом utf-8. Возможно Обработка UTF-8 в базах данных JavaScript, PHP и не-UTF8 поможет вам. Другой источник информации о utf-8 и PHP - это PHP UTF-8 cheatsheet .

1 голос
/ 30 июня 2009

пытались ли вы посмотреть htmlspecialchars () и htmlspecialchars_decode ()

Josh

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