htmlspecialchars () переводит другие специальные символы

htmlspecialchars (), похоже, переводит специальные символы, подобные следующему: āķūņūķī в соответствующий номер объекта:

ā ķ ū ņ ū ķ ī

Хотя некоторые остаются непереведенными, например:

žš

Я бы хотел, чтобы htmlspecialchars() (или какая-либо другая функция) не переводил эти символы алфавитного типа ... Чтобы он переводил только следующее (как, кажется, указывает на руководство по php.net):

  1. '&' (амперсанд) преобразуется в ''
  2. '"' (двойные кавычки) превращается в '', если ENT_NOQUOTES не установлен.
  3. «'» (одинарная кавычка) становится «»' только тогда, когда установлена ​​ENT_QUOTES.
  4. '' (меньше чем) становится ''
  5. '>' (больше чем) становится ''

Причина, по которой мне это нужно, заключается в том, что после запроса POST я запускаю этот пользовательский ввод через htmlspecialchars(), прежде чем помещать его обратно в новый набор входных html. Такие символы, как &, ", ',‹,>, должны быть переведены, чтобы не вызывать ошибок отображения и т. Д. Но мне нужны специальные символы, такие как' āķūņūķī ' остаются без изменений, иначе пользователь будет очень запутан.


person Mike Mike    schedule 08.05.2012    source источник
comment
htmlspecialchar()s 3-й параметр поддерживает кодировку, возможно, это поможет.   -  person ccKep    schedule 08.05.2012


Ответы (2)


Установите третий параметр как UTF-8:

echo htmlentities('āķūņūķī', ENT_QUOTES, 'UTF-8');

Кодировка по умолчанию для htmlspecialchars - ISO-8859-1.

Прецедент:

var_dump(htmlentities('āķūņūķī'));
var_dump(htmlentities('āķūņūķī', ENT_QUOTES, 'UTF-8'));

Вывод:

string(84) "�ķū�ūķī"
string(14) "āķūņūķī"

http://codepad.org/MCaDosQ5

person Wesley Murch    schedule 08.05.2012

Символы со значениями Unicode больше 255 необходимо преобразовать в их числовое представление, чтобы они обрабатывались правильно.

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

Что касается декодирования на принимающей стороне, смотрите htmlspecialchars_decode. Вы можете найти документацию на веб-сайте PHP - справочная страница htmlspecialchars_decode

person Julie in Austin    schedule 08.05.2012