htmlspecialchars (): неверная многобайтовая последовательность в аргументе - PullRequest
15 голосов
/ 27 сентября 2010

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

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

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

Спасибо.

Ответы [ 6 ]

14 голосов
/ 27 сентября 2010

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

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

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

5 голосов
/ 01 июля 2012

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

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

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

4 голосов
/ 27 сентября 2010

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

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

Мое решение заключалось в написании сценария для передачи моих строк через iconv с использованием модификатора // IGNORE для удаления поврежденных данных.

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

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

1 голос
/ 23 октября 2014

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

mb_substr решил проблему:)

1 голос
/ 20 мая 2014

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

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

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

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

0 голосов
/ 29 сентября 2010

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

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

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

...