Здравствуйте,
Перенес сайт с PHP 7.4 на PHP 8.1 и функция iconv() перестала работать.
Ошибка следующая:<b>Warning</b>: iconv(): Wrong encoding, conversion from "utf-8" to "windows-1251" is not allowed in <b>/web/action/gen.php</b> on line <b>104</b><br />
Подскажите как выяснить причину?
Возможно, попался символ, отсутствующий в 1251
Замените to на 1251//IGNORE
Добрый день!
Вот, что произойдёт с iconv и для сравнения с mb_convert_encoding,
если попадётся символ, отсутствующий в 1251PHP:
<? $str = «Привет из Münchenа!»; /* PHP Version: 8.1.9 Notice: iconv(): Detected an illegal character in input string in …….. on line 6 Привет из M?nchenа! */ ?>В этом случае не выдётся «iconv(): Wrong encoding, conversion from… «
Попробуйте заменить на iconv на mb_convert_encoding
Удачи!
Ну, значит, не в версии PHP дело, а в подаваемых для перекодирования данных. Они таки Wrong encoding, то есть не в UTF-8
Мы ведь не ядерной физикой занимаемся. Нам для проверки гипотиз синхрофазатроны не нужны.
записал подаваемые для перекодирования данных в кодировке ISO-8859-1, однако таки сообщение не Wrong encoding…PHP:
<? //$str = «Привет из Münchenа!»; /* PHP Version: 8.1.9 ISO-8859-1 Mьnchen Notice: iconv(): Detected an illegal character in input string in …… on line 8 M?nchen */ ?>Может быть Wrong encoding… означает, iconv не находит кодировку указанную в параметрах вызыва?
Данный вариант работает вроде:
PHP:
Ранее, по своей глупости, я перепутал кодировки местами, поставив их в порядке как для iconv.
Спасибо за помощь!
@Mick_20, да, есть некоторый набор ф-ций у PHP, в которых чахорда с параметрами (
Не нужны, подтверждаю. Достаточно проверить входные данные и правописание имен кодировок.
Гипотеза: Может быть Wrong encoding… означает, iconv не находит кодировку указанную в параметрах вызова?
PHP:
<? /* PHP Version: 8.1.9 ISO-8859-1 Mьnchen Warning: iconv(): Wrong encoding, conversion from «utf-8» to «windows1251» is not allowed … on line 8 M?nchen */ ?>
.Наверное.
UTF-8 — имя, utf-8 — псевдоним.
Список поддерживаемых кодировок(и их псевдонимов) зависит от реализации libiconv
То есть, если раньше вместо CP1251 было достаточно написать 1251, то с какого-то момента разработчики решили это дело прекратить
Вы правы по поводу libiconv
Специально задал параметр windows1251 вместо windows-1251 и получил ту же ошибку, что у Mick_20.
Однако у него параметры заданы верно. Из этого следует, что проблема в libiconv, т.е. в PHP, а не в параметрах и/или в данных.
В моём случае проблем нет. phpinfo выдаёт:
iconv support enabled
iconv implementation «libiconv»
iconv library version 1.16
интересно, какая версия libiconv у Mick_20
Вроде бы разобрались, что лучше mb-либу юзать.