Índice das dicas

Dica para quem tem problemas com o UTF-8 no Wordpress

Por Carlos E. Morimoto em 14 de novembro de 2008 às 16h41

4

Ao instalar o Wordpress, você tem a opção de utilizar codificação em ASCII ou em UTF-8, que são os dois sistemas mais usados atualmente. O ASCII é o sistema que "simplesmente funciona", enquanto o UTF-8 é a novidade, o sistema novo e melhorado, mas que em compensação possui sua dose de problemas.

No meu caso, o que mais incomodava era a substituição das aspas por aspas inglesas e dos dois traços pelo traço longo, que atrapalhavam no caso dos posts com scripts, já que a substituição dos caracteres resultavam em erros ao copiar e colar o texto.

A solução veio com uma dica do Marcos Elias, que indicou o plugin Unfancy Quote. Originalmente ele é destinado a uma tarefa simples: substituir as aspas inglesas por aspas simples e as instruções no site não sugerem que ele faça nada além disso.

Entretanto, uma olhada rápida no código revela que ele é na verdade muito mais poderoso do que as aparências sugerem. Ele é um script bastante simples, que é executado pelo wordpress antes de exibir qualquer página, fazendo a substituição dos códigos das aspas. Isso é feito pela função "strip_quotes" no final do script:

function strip_quotes($text = '')
{
$text = str_replace(array("‘", "’", "′"), "'", $text);
$text = str_replace(array("“", "”", "″"), """, $text);
return $text;
} # end strip_quotes()

Como pode ver, ela é uma função bem simples. Dentro dos parenteses vão os códigos UTF-8 pelos quais o script procura e em seguida vai o código que substitui qualquer um deles quando encontrado.

Você pode ver as correspondências dos códigos no http://www.tony-franks.co.uk/UTF-8.htm. O """ corresponde às aspas duplas, enquanto o "'" às aspas simples.

O segredo é que você pode adicionar novas linhas dentro da função para substituir qualquer outro caracter com o qual estiver tendo problemas. Basta abrir uma página do seu blog onde ele apareça usando o navegador, usar a função de exibir o código fonte para descobrir qual é o código do caracter e consultar a tabela do link anterir para ver qual é o código do caracter correto. No meu caso, quero substituir o traço longo, cujos códigos são o &#8211 e o – por dois traços simples, cujo código é -. Para isso, precisei apenas modificar o script, incluindo uma nova linha com as instruções:

function strip_quotes($text = '')
{
$text = str_replace(array("‘", "’", "′"), "'", $text);
$text = str_replace(array("“", "”", "″"), """, $text);
$text = str_replace(array("–", "–"), "--", $text);
return $text;
} # end strip_quotes()

Como pode ver, este simples plug-in acaba sendo a solução mais simples para os problemas de substituição de caracteres no UTF-8. Basta alimentá-lo com os códigos dos caracteres que devem ser substituídos, criando uma tabela de substituição.

4 comentáriosPor Carlos E. Morimoto. Revisado 23 de março de 2011 às 11h33

Comentários

 
por niquel (anônimo) em 24 de novembro de 2009 às 13h35
O link está quebrado:
http://www.tony-franks.co.uk/UTF-8.htm

solução:
http://web.archive.org/web/20071017060714/http://www.tony-franks.co.uk/UTF-8.htm
 
por Marcos Elias (anônimo) em 14 de novembro de 2008 às 21h43
Acho que vou usar ele fixo então... hehe.
Mesmo que use um tequinho a + de CPU, estou com o wp-supercache ativado, então tooodas as páginas que já foram acessadas pelo menos 1x agora são arquivos html estáticos, só sendo atualizados qdo edito ou tem um novo comentário. Sobre a carga de CPU é que tenho ficado com uma espécie de "trauma" recentemente, rsrs.
 
por Carlos E. Morimoto em 14 de novembro de 2008 às 21h28
Eu não percebi nenhuma diferença mesurável de desempenho ao usar o plug-in, como ele faz uma substituição simples, a carga de processamento é provavelmente baixa.
Não cheguei a testar, mas acredito que daria para incluir uma versão modificada da função diretamente no post.php para ele fazer a substituição antes de salvar no DB, assim já ficaria em definitivo :)
 
por Marcos Elias (anônimo) em 14 de novembro de 2008 às 19h48
Vlw a referência :)

Ainda vou tentar mexer nele diretamente, pra usar não como plugin, mas no sistema do Wordpress em si.

Acho mais que é encrenca do Wordpresss que cisma com as "aspas bonitinhas". Se vc colocar o código &#XXX; da aspa no post, ainda assim nem sempre funciona, aparecem as inclinadas... E algumas coisas "somem" do editor do Wordpress, como um target=_blank na tag FORM, ao usar o modo visual. Acho que eles deveriam deixar um campo de texto puro, pra pessoa digitar o HTML desejado e não mexer nele depois :P