+5

Trabalhando com Unicode

criado por Rubens Takiguti Ribeiro em 02/12/2009 9:28pm
PHP e Unicode

PHP 5 não dá suporte nativo às codificações Unicode. Porém, uma das grandes promessas para PHP 6 será a divisão do tipo string em 2: string e binary. O futuro tipo string será usado para representar textos em alguma codificação e será suportada a utilização de unicode. Já o tipo binary será usado para armazenar sequência de bytes, assim como é o tipo "string" atual.

Atualmente, se fizermos o seguinte código em PHP e salvarmos em UTF-8...
<?php
$texto = 'açAEIOU';
$letra = $texto[3];
$sub   = substr($texto, 0, 3);
$len   = strlen($texto);

... o valor da variável $letra receberia o valor "A", a variável $sub receberia o valor "aç" e a variável $len receberia o tamanho 8.

Isso acontece porque o operador colchetes obtem o N-ésimo byte da string e não o N-ésimo símbolo. Da mesma forma, a função substr trabalha com bytes e não com símbolos. E a função strlen devolve o número de bytes e não o número de símbolos. Como o símbolo "ç" ocupa dois bytes em UTF-8, estas funções tem seu significado afetado.

Portanto, para trabalhar com textos em UTF-8, é preciso ferramentas externas que simulem as operações básicas sobre textos. Uma alternativa simples é usar a extenão PRCE para obter substring, já que a extensão já suporte codificação UTF-8.

Para um script PHP informar para o navegador que está utilizando a codificação UTF-8, basta usar a função header e informar o valor da diretiva Content-type com o valor adequado. Por exemplo:

<?php
header('Content-Type: text/html; charset=UTF-8');
...

Uma outra alternativa é simular o comportamento do cabeçalho HTTP através da tag HTML "meta":

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    ...

Comentários:

Mostrando 1 - 6 de 6 comentários
PazNatan disse:
ficou legalzinho
03/05/2010 1:01pm (~10 anos atrás)

Nelson disse:
Artigo explicado de forma bem "entendível", gostei muito.
Sugiro um deste tipo falando de array, seria legal.
17/03/2010 1:30pm (~10 anos atrás)

Ótimo artigo!!!
Você explicou muito bem desde a base até ao topo, fazendo-o ficar fácil de compreender!!!
Parabéns!!!
13/03/2010 7:13pm (~10 anos atrás)

Daniel Silva disse:
Uau! Magnífico o artigo! Muito elucidativo! Meus parabéns!
06/01/2010 1:10am (~10 anos atrás)

Marcos Regis disse:
Ótimo artigo. Parabéns.
05/12/2009 4:13pm (~11 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)