is_utf8 - Como verificar se um string está codificado em UTF-8

Quando você usa uma mescla de arquivos PHP com envios de formulários usando jQuery.ajax(), é quase impossível precisar quando o envio dos dados é feito pelo usuário através do submit normal da tag FORM ou se vem através do JavaScript.

Como o jQuery converte os dados do formulário para o formato UTF-8 antes de enviá-los, é necessário usar a função utf8_decode para utilizar os dados do formulário enviados.

Como, às vezes, pode haver arrays extensos, com muitos itens e índices, há duas funções interessantes para resolver esse problema, e são a solução para muitas dores de cabeça.
function is_utf8 ($str) {
    $len = strlen($str);

    for ($i=0; $i<$len; $i++){
        $c = ord($str[$i]);

        if ($c > 128) {
             if ($c > 247) return false;
            elseif ($c > 239) $bytes = 4;
            elseif ($c > 223) $bytes = 3;
            elseif ($c > 191) $bytes = 2;
            else return false;

            if (($i + $bytes) > $len) return false;

            while ($bytes > 1) {
                $i++;
                $b = ord($str[$i]);
                if ($b < 128 || $b > 191) return false;
                $bytes--;
            }
        }
    }

    return true;
}

function array_utf8_decode ($a) {
    foreach ($a as $k => $v) {
        $a[$k] = is_array($v) ? array_utf8_decode($v) : (is_string($v) && is_utf8($v) ? utf8_decode($v) : $v);
    }

    return $a;
}

$_POST = array_utf8_decode($_POST);
$_GET = array_utf8_decode($_GET);

Nenhum comentário:

Postar um comentário