Converter caracteres HTML para legíveis

Problemas de codificação diferente de um texto visualizado na internet e do navegador web podem gerar problemas para exibir certos caracteres. Para garantir que os caracteres especiais (por exemplo, os acentuados) sejam exibidos em qualquer navegador em qualquer lugar do mundo, é comum usar as entidades HTML (entities). Uma tabela completa de caracteres HTML pode ser vista nesse link.

Geralmente os navegadores web convertem corretamente esses caracteres para que possamos ler os textos. No entanto, às vezes pode ser necessário realizarmos a conversão em outro contexto. Por exemplo, ao copiar o código fonte de uma página com essa codificação e tentar ler o texto com mais clareza. Ou também quando você edita um texto com código no wordpress e acidentalmente sai do modo texto e entra no modo visual e, ao retornar, o seu código a ser divulgado está cheio dessas entidades HTML.

Existem diversas linguagens e programas para converter automaticamente uma ou mais entidades HTML em caracteres legíveis. O shell script abaixo (convert_html.sh) recebe como parâmetro o nome do arquivo com o texto a ser convertido (./convert_html.sh original.php, por exemplo) e retorna um arquivo com o texto já convertido (saida.php).

O programa que faz a conversão é o PHP através da função “html_entity_decode()”, cuja entrada foi redirecionada por um pipe a partir da saída do programa cat.

Pode acontecer do arquivo original ter tido seu código fonte alterado mais de uma vez consecutivamente – você pode notar isso se aparecer uma entidade do e comercial antes de uma entidade qualquer pelo menos uma vez. Nesse caso, copie o conteúdo do arquivo saida.php para o arquivo de entrada e rode o programa novamente. Repita o procedimento até sumirem todas as entidades HTML.

Uma alternativa é o programa recode, instalável pelo comando “sudo apt-get install recode”. A conversão de um arquivo todo pode ser feita através do seguinte comando:

No entanto, a saída ficou com uma codificação diferente da que costumo usar (UTF-8) e não descobri como evitar isso.