PHP é à quinta-feira – Conversão condicional para UTF-8
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.
Este artigo tem mais de um ano
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
Quantos refresh’s fazes ao pplware por dia Morbus?
ele deve fazer isso mais de 999Milhões de vezes!
pplmaniaco lol
boa dica, tks
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!
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.
Beleza. Alto nível. A continuar com os tutoriais. \m/
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/
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 🙂
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
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.
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.
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) 🙂
Grande dica esta 🙂
Tava mesmo a precisar de algo assim!