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