PHP é à quinta-feira – Conversão condicional para UTF-8

14 Comentários

Boas. A nível de direitos sobre o código, devo-vos remeter para o meu primeiro artigo desta rubrica.

Hoje trago-vos duas funções que juntas permitem converter uma string para UTF-8 caso ainda não o seja.

A função de verificação de utf-8 is_utf8() foi retirada daqui:

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;
}

function utf8($string)
{
  if (is_utf8($string))
  {
    return $string;
  } else {
    return utf8_encode($string);
  }
}
?>

Modo de utilização:

Converter String ISO-8859-1 (normal latino) $a para UTF-8

<?php
$a = "áêõ€Äíç";
echo utf8($a);
?>

Qualquer dúvida ou sugestão, estão completamente à vontade.

Comentários

14

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Morbus

    Ui, isto vai dar MUITO jeito na minha junção manhosa entre o wordpress e o bbpress 😀

    Thanks pplware!

    —–
    http://nocontinues.net/ – Os jogos que interessam

    1. Avatar de YourFriend
      YourFriend

      Quantos refresh’s fazes ao pplware por dia Morbus?

      1. Avatar de Pedro
        Pedro

        ele deve fazer isso mais de 999Milhões de vezes!

        pplmaniaco lol

  2. Avatar de Cleber Picolo
    Cleber Picolo

    Nossa! isso é sempre um grande problema.. já sofri muito com isso, principalmente em projetos internacionais onde temos que dar suporte a vários caracteres diferentes..
    Como programadores, sempre fica aquela dúvida, será que essa string já está na codificação certa ou não? essa função parece resolver isso..

    Excelente solução!

  3. Avatar de Bruno Bernardino

    Se as coisas forem feitas desde o início em UTF-8 e se tiver o cuidado de usar UTF-8 na base de dados e realizando a query “SET NAMES ‘utf8′”, esta função não é necessária, mas quem trabalha “nisto” sabe o quão complicado é ter o “ambiente” ideal 🙂

    Os editores por defeito estão em iso-8859-1, e isso depois dá problemas.

    Estas funções já me pouparam e resolveram muitos problemas 🙂

    Cheguei a tentar outras funções de teste a utf8, mas esta foi a melhor que encontrei e até agora não me falhou.

  4. Avatar de carlos rajas
    carlos rajas

    Beleza. Alto nível. A continuar com os tutoriais. \m/

  5. Avatar de Hugo Sousa

    Realmente o encoding é sempre uma luta e por muito que tentemos criar o ambiente perfeito, há sempre um ou outro detalhe que nos escapa e eventualmente dá barraca…

    Este artigo está bom, embora na minha opinião a criação de duas funções só para este efeito parece-me fútil. Com apenas uma se conseguiria o efeito desejado e a chamda era a mesma.

    No entanto, se quisermos usar a is_utf8() exclusivamente mais tarde, esta parece-me ser, de facto, a forma mais correcta. 🙂

    ________________

    http://www.slothminds.com/

    1. Avatar de Bruno Bernardino

      Ainda bem que colocaste essa última frase 🙂

      É exactamente isso, costumo separar as coisas, para depois poder usar independentemente.

      Por exemplo, cheguei a criar uma função para fazer o decode de utf8 para utilizar numa outra função parcialmente, nessa função usei o is_utf8 🙂

      Obviamente que se pode juntar tudo se se pretende apenas e simplesmente fazer o encode, mas já expliquei porque separei 🙂

  6. Avatar de Mrodrigues
    Mrodrigues

    Bela dica sim senhor…

    O MORBUS não é humano, é uma máquina que comenta qq coisa sempre que tem um novo artigo…depois explico como podemos fazer um software que faça o mesmo.lololol

  7. Avatar de Pedro R.
    Pedro R.

    boas por aqui!

    eu fui um daqueles a dizer que iria seguir este tutorial desde o inicio, mas menti 😛

    agora que preciso para a escola, verifiquei que os tutoriais estão muito bons e então os iniciais muito simples para que uma pessoa comece a perceber devagar e que se interesse.

    Agora vejo que o php não é assim uma linguagem tão complicada, comparando com os scripts que a prof dava que ninguém entendia nada.

    Gostei mesmo.

    1. Avatar de Pedro R.
      Pedro R.

      só tenho um aspecto negativo, mas não se pode ter tudo.

      O Pedro Pinto explicava muito melhor, fazia a papinha toda. Explicava todos os passos de modo a perceber tudo facilmente.

      Mas assim, quem for interessado irá certamente colocar questões se não entendeu alguma parte do código.

      1. Avatar de Bruno Bernardino

        Agradeço o comentário e aceito todas as críticas construtivas mas, como referi no meu primeiro artigo, o meu objectivo para esta rubrica é diferente do inicial (com o Pedro Pinto) 🙂

  8. Avatar de Francisco

    Grande dica esta 🙂

    Tava mesmo a precisar de algo assim!