Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal estou com problemas na hora de mostrar o resultado de uma consulta trazida do banco de dados sql server.
No BD o collation está latin1.
Na minha página o enconding e charset como utf8.
Quando mostro o resultado os acentos estão zuados.
Alguém pode me ajudar??
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">](http://www.w3.org/1999/xhtml)
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php$data = mssql_query($sql, $conecta);
while ($artigo = mssql_fetch_object($data))
{
echo $artigo->titulo;
}
?>
</body>
</html>Ok, fiz os testes aqui e mesmo assim não resolveu.
Agora o resultado aparece assim:
Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
antes aparecia assim:
Estudo de caso: Inspe��o do Pier de atraca��o Tamba�
Valeu
e já testei converter usando utf8_decode, utf8_encode e htmlentities e também não deu certo.
Poxaa tente assim
Ops ia postar isso
Vou ver aki, eu tbm to com esse problema, mas nao puxando do banco!
Resultado:
Sem nada: Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
utf8_decode: Estudo de caso: Inspe‡? do Pier de atraca‡? Tamba£
utf8_encode: Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
htmlentities: Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
Valeu, fico no aguardo
Tenta colocar um dado novo, usando a formatação ISO no arquivo PHP e consulta ele pra ver se funciona. Os dados que estão no banco já devem estar corrompidos...
Carlos Eduardo
OK, vou fazer já retorno.
Amigo,
correto, funcionou.
Porém e meus dados já gravados, eu preciso deles.
Mas eu não entendi direito.
Por que no banco de dados está com o collation = SQL_Latin1_General_CP850_CI_AI e os dados inseridos ficaram assim
BD: ßÚݾ·þÒÔ
Inserido: áéíóúçãâ
E outra coisa, na outra aplicação em ASP onde os dados são inseridos aparece corretamente os acentos.
Além de ser inserido os dados através de lá.
Então o ASP insere no banco as informações e eu em outra aplicação PHP quero consultar esse mesmo dado.
O ASP está com o charset e enconding iso-8859-1 e quando insere no banco insere os dados com acentos.
BD: Estudo de caso: Inspeção do Pier de atracação Tambaú
e quando consulto no php vem este Resultado:
Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
E ai? como fazer para consultar esses dados?
Salve o arquivo como ANSI, no notepad!
Salve e Rode e veja no que dá Paulo!
T+
Nada também Dee...
a mesma coisa acontece...
Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
tente usar a função "iconv();"
Nossa nem com isso...
Original : Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
TRANSLIT : Estudo de caso: Inspe
IGNORE : Estudo de caso: Inspeo do Pier de atracao Tamba
Plain : Estudo de caso: Inspe
você fez como
UTF para ISO?
tente fazer ao contrário
às vezes pode ser nescessário reconverter ISO-UTF e UTF-ISO
while ($artigo = mssql_fetch_object($data))
{
$text = $artigo->pt_titulo;
echo "<br>".'Original : ', $text, PHP_EOL;
echo "<br>".'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo "<br>".'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo "<br>".'Plain : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;
echo "<br>";
echo "<br>".'Original : ', $text, PHP_EOL;
echo "<br>".'TRANSLIT : ', iconv("ISO-8859-1", "UTF-8//TRANSLIT", $text), PHP_EOL;
echo "<br>".'IGNORE : ', iconv("ISO-8859-1", "UTF-8//IGNORE", $text), PHP_EOL;
echo "<br>".'Plain : ', iconv("ISO-8859-1", "UTF-8", $text), PHP_EOL;
echo "<br>";
echo "<br>".'Original : ', $text, PHP_EOL;
echo "<br>".'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", iconv("ISO-8859-1", "UTF-8//TRANSLIT", $text)), PHP_EOL;
echo "<br>".'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", iconv("ISO-8859-1", "UTF-8//TRANSLIT", $text)), PHP_EOL;
echo "<br>".'Plain : ', iconv("UTF-8", "ISO-8859-1", iconv("ISO-8859-1", "UTF-8//TRANSLIT", $text)), PHP_EOL;
}
e o resultado:
Original : Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
TRANSLIT : Estudo de caso: Inspe
IGNORE : Estudo de caso: Inspeo do Pier de atracao Tamba
Plain : Estudo de caso: Inspe
Original : Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
TRANSLIT : Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
IGNORE : Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
Plain : Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
Original : Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
TRANSLIT : Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
IGNORE : Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
Plain : Estudo de caso: Inspe‡Æo do Pier de atraca‡Æo Tamba£
Ah e para o enconding e charset utf8 e iso-8859-1 testei nos dois deu mesmo resultado
array(3) { ["input_encoding"]=> string(10) "ISO-8859-1" ["output_encoding"]=> string(10) "ISO-8859-1" ["internal_encoding"]=> string(10) "ISO-8859-1" }
e para ser bem claro no BD SQL Server o collation é SQL_Latin1_General_CP850_CI_AI
e os dados estão gravados assim:
Estudo de caso: Inspeção do Pier de atracação Tambaú
tem com você acessar o banco de dados e retirar diretamente esta "frase"?
como assim henry?
existe uma aplicação em ASP que faz isso corretamente, até mesmo é por lá q os dados são gravados no BD.
Mas tenho que fazer outra aplicação em PHP para retornar esses dados só q ai vem o erro de acentos e caracteres.
...
você acabou respondendo acima e nem vi.
cara é o seguinte:
testei aki assim:
a página gerando sob
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml"](http://www.w3.org/1999/xhtml) xml:lang="pt-br">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
echo 'Estudo de caso: Inspeção do Pier de atracação Tambaú'; // normalse charset for UTF-8
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
echo iconv("ISO-8859-1", "UTF-8", $ctr);e rodando normal.
agora é ver como vem do banco!
nem sei o q dizer...
tbm já estou no limite...
mas não é possível q ninguém possa ajudar...
Bom Paulo.
Já tive muitos problemas com isso.
jah fiz muitas peripécias até sincronizar os dados (entrando e saindo).
o correto seria utilizar "utf8_unicode_ci" (que é mais aberto e tem menos problemas com acentos) como "Collation" padrão do banco de dados
boa sorte pra ti.
Só uma pergunta... Por acaso você está usando Ajax para exibir os dados? Se sim, isto pode afetar a codificação.
Carlos Eduardo
Nossa...
não vão acreditar...
Desculpa mas eu não conhecia um charset CP850...
Sabia que era óbvio...
Apenas fiz uma conversão utilizando o collation do BD e pronto tudo resolveu...
se a página estiver com enconding utf-8 e o collation do BD estiver SQL_Latin1_General_CP850_CI_AI basta utilizar o código abaixo...
echo "<br>".'TRANSLIT : ', iconv("CP850", "UTF-8//TRANSLIT", $text), PHP_EOL;
ahhh e sim matias estou utilizando dentro do ajax... os testes foram fora, mas eu vou utilizar dentro e deu certo tbm...
VALEUU!!
:D
maravilha!
no final eu tava certo.
soh tinha esquecido de usar o bendito nome do "Latin1_General_CP850".
sucesso Paulo.
use o charset= iso-8859-1 no lugar de UTF-8
e no php antes de tudo coloque
header("Content-Type: text/html; charset=iso-8859-1",true);