htmlspecialchars (): недопустимая многобайтовая последовательность в аргументе
Я получаю эту ошибку на своем локальном сайте.
Warning (2): htmlspecialchars(): Invalid multibyte sequence in argument in [/var/www/html/cake/basics.php, line 207]
кто-нибудь знает, в чем проблема и каким должно быть решение для этого?
спасибо.
6 ответов
обязательно укажите кодировку UTF-8, Если ваши файлы кодируются так:
htmlspecialchars($str, ENT_COMPAT, 'UTF-8');
кодировка по умолчанию для htmlspecialchars
is ISO-8859-1 (начиная с PHP v5.4 кодировка по умолчанию была превращена в "UTF-8"), что может объяснить, почему все идет наперекосяк, когда он встречает многобайтовые символы.
Я побежал к этой ошибке на производстве и нашел этот отличный пост об этом -
http://insomanic.me.uk/post/191397106/php-htmlspecialchars-htmlentities-invalid
похоже, что это ошибка в PHP (по крайней мере, для CentOS), которая отображает эту ошибку, когда ошибки отображения выключены!
вы вводите поврежденные символьные данные в функцию или не указываете правильную кодировку.
У меня была эта проблема некоторое время назад, старое поведение (до PHP 5.2.7 я считаю) должно было вернуть строку, несмотря на повреждение, но поскольку эта версия будет выбрасывать эту ошибку.
мое решение включало написание скрипта для подачи моих строк через iconv использование модификатора / / IGNORE для удаления поврежденных данных.
(У нас был поврежден база данных, которая имела некоторые строки в UTF-8, некоторые на латыни-1 обычно с неправильно определенными типами символов на столбцах).
(глядя на комментарий к ответу тату, я бы начал с просмотра (и игры) с содержимым переменной $charset.
правильный код, чтобы не получить никакой ошибки:
htmlentities($string, ENT_IGNORE, 'UTF-8') ;
рядом с этим вы также можете использовать str_replace
чтобы заменить некоторые плохие символы для ваших нужд, а затем использовать функцию htmlentities.
посмотри rss-канал он заменил большой HTML-знак на gt; тег, который может не выглядеть хорошо при чтении rss-канала. Вы можете заменить это чем-то вроде " - " знак или ")" и т. д.
была такая же проблема, потому что я был с помощью substr
на строке utf-8.
Ошибки случались нечасто и казались случайными. Ошибка произошла, только если строка была вырезана на многобайтовом char!
mb_substr
решил проблему :)
Это на самом деле одна из самых частых ошибок, которую я получаю.
иногда я не использую __() перевод - просто простой немецкий текст, содержащий äöü. Там особенно важно иметь в виду кодировку файлов.
поэтому убедитесь, что вы правильно сохраните файлы, содержащие специальные символы, как UTF8.