iconv_strlen() - //IGNORE не работает
В одном скрипте я обнаружил ошибку из функции iconv_strlen(). Попробуйте проверить utf8-len строки в cp1251.
$len = iconv_strlen($cp1252str, "utf-8");
Я пытаюсь использовать "utf-8//IGNORE" для отключения звука, но это не работает. Вот пример с iconv (//IGNORE работает) и iconv_strlen (//IGNORE не работает)
<?php
$cp1252str = '';
for ($i = 128; $i < 256; $i++) {
$cp1252str .= chr($i);
}
iconv("cp1252", "utf-8//IGNORE", $cp1252str);
iconv_strlen($cp1252str, "utf-8//IGNORE");
Выход:
Примечание PHP: iconv_strlen(): обнаружен недопустимый символ во входной строке в /home/user/tmp/test.php в строке 9 Трассировка стека PHP: PHP 1. {main}() /home/user/tmp/test.php:0 PHP 2. iconv_strlen() /home/user/tmp/test.php:9
Как я могу отключить эту ошибку? Только с @?
1 ответ
Получить ответ на https://bugs.php.net/bug.php?id=71346&edit=2
Это связано с тем, что параметр charset в iconv_strlen() предназначен для входной строки, а флаг "//IGNORE" предназначен для использования только в выходной кодировке во время преобразования при вызове iconv().
"//IGNORE" означает, что символы, которые не могут быть представлены в выходной кодировке, будут отброшены. Но в вашем случае вы даете входную строку, которая является недопустимым UTF-8, и сообщаете iconv_strlen(), что она закодирована в кодировке UTF-8, поэтому вы правильно получаете уведомление о том, что ваша входная строка содержит недопустимый символ.