Acentuação PHP + Mysql

DannyPt

Power Member
Olá pessoal,

É o seguinte, estou a testar uma BD em mysql...com uma tabela de contactos criada na mesma. Acontece que ao ver a tabela de dados no frontend, os nomes com acentos aparecem-me por exemplo S�rgio Alves em vez de Sérgio Alves.

Tenho tudo em UTF-8 na tabela...e ate consegui contornar isto usando charset=ISO-8859-1 no notepad++

Acontece que quando coloco charset=ISO-8859-1 no notepad++ são as informações do frontend que possuem acentos que ficam mal. Ou seja, em vez de aparecer "Ligação bem sucedida" como aparecia, aparece "Ligação bem sucedida". Contudo, os nomes da bd aparecem bem.

Também já experimentei colocar echo utf8_encode("Ligação bem sucedida");

Mas não deu...

Quando uma coisa fica bem a outra fica mal...lol

Realmente não estou mesmo a ver o que possa ser...alguém me dá umas luzes?



Obrigado
 
Experimenta meter isto logo nas 1ªas linhas, depois de <?php ...

setlocale(LC_ALL, 'pt_PT');
ou
setlocale(LC_ALL, 'Portuguese_Portugal.1252');

Garante que tens BD, e notepad++ em utf-8.

Experimenta com <meta charset="utf-8"> no HTML

Assim de repente, não me lembro de mais.
Tive esse problema, mas foi por causa do TextWrangler, que não estava em ut-8...
 
Última edição:
Vou tentar fazer isso webmonkey. Tem de ser precisamente a seguir ao <?php ?

Na meta tenho isto: <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

Também já tentei colocar utf-8 na meta html e no notepad++ mas nada...

Epah estou-me a passar com isto porque não sei o que experimente mais...sinceramente.

A bd está toda em utf8_general_ci

:\
 
Quando tive esse problema optei por deixar o charset=ISO-8859-1 assim tudo o que vem da base de dados vem direito e substitui as mensagens predefinidas por Liga&ccedil;&atilde;o ... todos os caracteres especiais (~, ç e acentos) que pertencem a mensagens pre-definidas substitui por o código que lhe corresponde &atilde=ã ... Pelo menos assim nunca ,mais tive problemas com esse tipo de caracteres .
 
Quando tive esse problema optei por deixar o charset= assim tudo o que vem da base de dados vem direito e substitui as mensagens predefinidas por Liga&ccedil;&atilde;o ... todos os caracteres especiais (~, ç e acentos) que pertencem a mensagens pre-definidas substitui por o código que lhe corresponde &atilde=ã ... Pelo menos assim nunca ,mais tive problemas com esse tipo de caracteres .

Pois, se eu colocar a meta e o notepad++ em ISO-8859-1, tudo o que vem da BD vem correcto. Só os echos que estão no notepad++ é que não...

Não percebi só o que tenho de substituir pelos ~ e ç. Podes explicar melhor?

Obrigado :)
 
Boas,

Tens que configurar isso na ligação da base de dados.
mysql_query("SET NAMES ‘utf8′"); mysql_query("SET character_set_connection=utf8"); mysql_query("SET character_set_client=utf8"); mysql_query("SET character_set_results=utf8");

Corre isso depois de te ligares á BD.

Cumps
 
Pois, se eu colocar a meta e o notepad++ em ISO-8859-1, tudo o que vem da BD vem correcto. Só os echos que estão no notepad++ é que não...

Não percebi só o que tenho de substituir pelos ~ e ç. Podes explicar melhor?

Obrigado :)

POr exemplo onde tens ç substituis por &ccedil; onde tens ã pões &atilde; onexemplo informação fica informa&ccedil;&atilde;o onde tiveres "á" metes &aacute; por exeplo sábado fica s&aacute;bado...
Nunca usei esse código que disseram secalhar até é mais fácil e rápido dessa maneira... Agora experimenta a que for mais fácil para ti.
Cumprimentos
 
Boas,

É simples, quando fazes insert's na BD utiliza o utf8_decode e quando vais buscar os dados à tabela utiliza o utf8_encode e vais ver que se acabam os problemas de acentos ;)
 
Tens o documento do html com o utf-8? é porque isso já me aconteceu, ter tudo ok do lado do php e depois faltar-me o cabeçalho no html a definir o encoding.
 
Refiro-me a isto:

<!DOCTYPE html>
<head>
<meta charset="UTF-8">
</head>

<body>

<?php

//codigo php aqui juntamente com o utf8_encode e utf8_decode

?>

</body>

</html>

Neste caso o cabeçalho está mais simplificado por estar em html5
 
Refiro-me a isto:

<!DOCTYPE html>
<head>
<meta charset="UTF-8">
</head>

<body>

<?php

//codigo php aqui juntamente com o utf8_encode e utf8_decode

?>

</body>

</html>

Neste caso o cabeçalho está mais simplificado por estar em html5

Isso já tinha experimentado.

Por exemplo: utf8_encode("Ligação bem sucedida");

E não deu. Não coloquei foi o decode. Onde coloco?

Também já experimentei o utf-8 na meta...fica o que está no código php bem e o que vem da bd fica mal...lol
 
Tens de usar o decode e o encode em simultâneo, ou seja, do que fazes decode, quando vais buscar tens de fazer encode

Caso nada disto funcione pode ter haver com o encoding do teu servidor :)

Por exemplo: INSERT INTO x (nome, morada) VALUES (" . utf8_decode($_POST['nome']) . ", " . utf8_decode($_POST['morada']) . ");

No caso do decode há-de ser algo do género:

$query = "SELECT nome FROM x";

$result = mysql_query($query);

while ($row = mysql_fetch_array($result)){
echo utf8_encode($row['nome']);
}

Isto é um exemplo muito simples, tenta adaptar ao teu código. Já agora já viste o encoding do browser? (lembrei-me agora disso).
 
Tens de usar o decode e o encode em simultâneo, ou seja, do que fazes decode, quando vais buscar tens de fazer encode

Caso nada disto funcione pode ter haver com o encoding do teu servidor :)

Por exemplo: INSERT INTO x (nome, morada) VALUES (" . utf8_decode($_POST['nome']) . ", " . utf8_decode($_POST['morada']) . ");

No caso do decode há-de ser algo do género:

$query = "SELECT nome FROM x";

$result = mysql_query($query);

while ($row = mysql_fetch_array($result)){
echo utf8_encode($row['nome']);
}

Isto é um exemplo muito simples, tenta adaptar ao teu código. Já agora já viste o encoding do browser? (lembrei-me agora disso).

Foi a primeira coisa que vi. Já coloquei em utf-8 e iso8589-1 :)

Vou tentar as soluções que me deram.

Obrigado
 
Já consegui resolver...

Retirei o UTF-8 da meta...coloquei UTF-8 sem bom nas configurações, e depois converti o documento para utf-8 sem bom no notepad++.

Assim funcionou.
 
Back
Topo