sexta-feira, 4 de setembro de 2015

Problemas de acentuação no PHP, Mysql e/ou HMTL


Desenvolvendo para web, geralmente esbarramos com problemas de acentuação. A grande sacada é sempre usar a codificação UTF-8. Para isso, temos como configurar o uso desse charset no PHP, Mysql e HTML
Veja:

PHP

Quando queremos imprimir acentuações pelo PHP, configure com o comando abaixo, inserindo-o na primeira linha do seu fonte.

header('Content-Type: text/html; charset=utf-8');


Mysql

Se a acentuação vem do banco de dados, faça assim:

$conn = mysql_connect('host', 'user', 'password'); 
mysql_set_charset('utf8',$conn);


HTML

Já no HTML, proceda assim:

<html>
<head>
<title>Títuloda página</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
...
</head>
...
</html>



Se nada disso ainda não deu certo, veja qual a codificação que está sendo usada no seu arquivo, .php, .html, ou qualquer outro formato.
Pelo Linux é fácil de verificar e corrigir. Pelo terminal, caminhe até aonde está seus arquivos e proceda dessa forma:

$ file fonte.php
fonte.php: PHP script, ISO-8859 text, with CRLF line terminators

Veja que a codificação do fonte.php é ISO-8859. Vamos alterar para UTF-8.

$ iconv -f ISO-8859-1 -t utf-8 fonte.php > fonte_new.php
$ file fonte_new.php
impr_notif2_utf8.php: PHP script, UTF-8 Unicode text, with CRLF line terminators


--- Editado em 27 de Janeiro de 2016

Recentemente precisei recodificar muitos arquivos e precisava de um script para isso. Após algumas pesquisas descobri formas práticas de se fazer a recodificação em massa.

for file in *.php
do
    iconv -f cp1251 -t utf8 "$file.new" > "$file" &&
    mv -f "$file.new" "$file"
done
Veja que com esse script criamos um arquivo temporário e logo em seguida o renomeamos para o nome original.

for file in *.php
do
    iconv -f cp1251 -t utf8 "$file" | sponge "$file"
done
Ou em uma linha só:

for file in *.php; do iconv -f iso-8859-1 -t utf8 "$file" | sponge "$file"; done
Já com esse script, não houve a necessidade de criação de um arquivo temporário, pois usamos o comando sponge, que vem do pacote moreutils, podendo ser facilmente instalado a partir do comando:

$ sudo apt-get install moreutils
Feito isso, basta entrar com o seguinte comando para conferir as novas codificações dos arquivos:

$ file --mime *
Agora, facilitando ainda mais, podemos usar o comando recode, instalado a partir do comando:

$ sudo apt-get install recode
Em seguida, entre com o script:

for file in *.php
do
    recode iso-8859-1..utf8 "$file"
done
Ou em uma linha só:

$ for file in *.php; do recode iso-8859-1..utf8 "$file"; done

Nenhum comentário:

Postar um comentário