htmlspecialchars(): Недопустимая многобайтовая последовательность в аргументе


Я получаю эту ошибку на своем локальном сайте.

Warning (2): htmlspecialchars(): Invalid multibyte sequence in argument in [/var/www/html/cake/basics.php, line 207]

Кто-нибудь знает, в чем проблема или каким должно быть решение для этого?

Спасибо.

Author: gautamlakum, 2010-09-27

6 answers

Обязательно укажите кодировку UTF-8, если ваши файлы закодированы таким образом:

htmlspecialchars($str, ENT_COMPAT, 'UTF-8');

Кодировка по умолчанию для htmlspecialchars - ISO-8859-1 (начиная с PHP версии 5.4 кодировка по умолчанию была изменена на "UTF-8"), что может объяснить, почему все идет наперекосяк, когда он встречается с многобайтовыми символами.

 13
Author: Tatu Ulmanen, 2014-03-20 16:38:00

Я столкнулся с этой ошибкой на производстве и нашел этот замечательный пост об этом -

Http://insomanic.me.uk/post/191397106/php-htmlspecialchars-htmlentities-invalid

Похоже, что это ошибка в PHP (по крайней мере, для CentOS), которая отображает эту ошибку, когда ошибка отображения отключена!

 5
Author: gingerCodeNinja, 2012-07-01 15:17:43

Вы вводите в функцию поврежденные символьные данные или не указываете правильную кодировку.

У меня была эта проблема некоторое время назад, старое поведение (до PHP 5.2.7, я полагаю) заключалось в том, чтобы возвращать строку, несмотря на повреждение, но с этой версии вместо этого она выдаст эту ошибку.

Мое решение заключалось в написании сценария для передачи моих строк через iconv с использованием модификатора //ИГНОРИРОВАТЬ для удаления поврежденных данных.

(У нас была поврежденная база данных, в которой были некоторые строки в UTF-8, некоторые на латинице-1, обычно с неправильно определенными типами символов в столбцах).

(Глядя на комментарий к ответу Тату, я бы начал с просмотра (и игры с) содержимым переменной $charset.

 4
Author: berty, 2010-10-01 15:50:15

Правильный код, чтобы не получить никакой ошибки:

htmlentities($string, ENT_IGNORE, 'UTF-8') ;

Кроме того, вы также можете использовать str_replace для замены некоторых плохих символов в соответствии с вашими потребностями, а затем использовать функцию htmlentities.

Взгляните на этот rss-канал он заменил большой html-знак на gt; тег, который может выглядеть не очень красиво при чтении rss-канала. Вы можете заменить это чем-то вроде знака "-" или ")" и т. Д.

 1
Author: Sailab Ash, 2014-05-20 15:48:57

Была та же проблема, потому что я использовал substr в строке utf-8.
Ошибка была нечастой и, казалось бы, случайной. Ошибка произошла только в том случае, если строка была вырезана на многобайтовом символе!

mb_substr решена проблема:)

 1
Author: CoR, 2014-10-23 13:10:32

На самом деле это одна из самых частых ошибок, которые я получаю.

Иногда я не использую __() перевод - просто обычный немецкий текст, содержащий äöü. Там особенно важно помнить о кодировке файлов.

Поэтому убедитесь, что вы правильно сохранили файлы, содержащие специальные символы, как UTF8.

 0
Author: mark, 2014-05-06 08:31:04