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, поэтому вы правильно получаете уведомление о том, что ваша входная строка содержит недопустимый символ.

Другие вопросы по тегам