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