Проверка UTF-8 в PHP, не используя preg_match ()

Используя стандарт "Для Каждого" цикла Вы не можете. Намерение "для Каждого" цикла состоит в том, чтобы позволить Вам концентрироваться на данных вместо базового набора.

5
задан liviucmg 13 January 2010 в 01:24
поделиться

4 ответа

Вы всегда можете использовать Многобайтовые строковые функции :

Если вы хотите использовать его часто и, возможно, когда-нибудь изменить:

1) Сначала установите кодировку, которую вы хотите использовать, в вашем файле конфигурации

/* Set internal character encoding to UTF-8 */
mb_internal_encoding("UTF-8");

2) Проверьте строку

if(mb_check_encoding($string))
{
    // do something
}

Или, если вы не планируйте его менять, вы всегда можете просто поместить кодировку прямо в функцию:

if(mb_check_encoding($string, 'UTF-8'))
{
    // do something
}
8
ответ дан 13 December 2019 в 05:39
поделиться

Вы пробовали ereg () вместо preg_match? Возможно, в этом нет этой ошибки, и вам не нужен потенциально ошибочный обходной путь.

1
ответ дан 13 December 2019 в 05:39
поделиться

У вас должна быть возможность использовать iconv для проверки действительности. Просто попробуйте преобразовать его в UTF-16 и посмотрите, не появится ли ошибка.

1
ответ дан 13 December 2019 в 05:39
поделиться

Вот решение на основе строковых функций:

http://www.php.net/manual/en/function.mb-detect-encoding.php#85294

<?php
function is_utf8($str) {
    $c=0; $b=0;
    $bits=0;
    $len=strlen($str);
    for($i=0; $i<$len; $i++){
        $c=ord($str[$i]);
        if($c > 128){
            if(($c >= 254)) return false;
            elseif($c >= 252) $bits=6;
            elseif($c >= 248) $bits=5;
            elseif($c >= 240) $bits=4;
            elseif($c >= 224) $bits=3;
            elseif($c >= 192) $bits=2;
            else return false;
            if(($i+$bits) > $len) return false;
            while($bits > 1){
                $i++;
                $b=ord($str[$i]);
                if($b < 128 || $b > 191) return false;
                $bits--;
            }
        }
    }
    return true;
}
?>
0
ответ дан 13 December 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: