Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 7

Problemas com acentuação JSON PHP

01-03-2011 12:48

Prezados Colegas!

depois de muita pesquisa sem uma solução concreta resolvi postar minha dúvida para ver se alguém me dá uma luz.
Tenho um código no qual o usuário digita o cep e os dados do logradouro, bairro e estado são completados automaticamente. Nesse código uso uma chamada getjson que chama uma arquivo php no qual há a chamada ao banco de dados e o retorno de uma string com json_encode. Já testei o retorno dessa string e nela as palavras acentuadas aparecem sem problemas, entretanto no código html que contém a função de chamada getjon, no carregamento do formulário os acentos são convertidos pelos caracteres especiais correspondentes. Alguém pode me ajudar. Vou postar os códigos abaixo.

Arquivo teste.php:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="jQuery.js" charset="UTF-8"></script> <script type="text/javascript"> $(document).ready(function(){ var cep; $("#cep").blur(function(){//quando o usuario tirar o foco do campo executa essa função cep=$("#cep").val(); //recebe o valor do campo cep digitado pelo usuário $.getJSON("pega_cep.php?cep=" + cep, function(data) { $("#rua").val (data.logradouro); $("#bairro").val(data.bairro); $("#cidade").val(data.cidade); $("#estado").val(data.uf); })//fim do jSON }) }) </script> </head> <body> <form> <fieldset> <legend>Formul&aacute;io de exemplo</legend> <label for="cep">CEP:</label> <input id="cep" maxlength="8" name="cep" size="9" onBlur="getEndereco()"/> <label for="rua">Logadouro:</label> <input id="rua" name="rua" size="50" /> <label for="bairro">Bairro:</label> <input id="bairro" name="bairro" size="30" /> <label for="cidade">Cidade:</label> <input id="cidade" name="cidade" /> <label for="estado">Estado</label> <input id="estado" maxlength="2" name="estado" size="2" /> </fieldset> </form> </body> </html>

Arquivo pega_cep.php:

<?php mb_internal_encoding("UTF-8"); mb_http_output( "iso-8859-1" ); ob_start("mb_output_handler"); header("Content-Type: text/html; charset=ISO-8859-1",true); include 'conexao.php'; $query=mysql_query("Select * from endereco end left join bairro bai on end.cd_bairro=bai.cd_bairro left join cidade cid on bai.cd_cidade=cid.cd_cidade left join uf uf on cid.cd_uf=uf.cd_uf where end.no_logradouro_cep = '".$_GET['cep']."'"); $teste=mysql_num_rows($query); if ($teste!=0){ $linha=mysql_fetch_array($query); $safe = array_map('htmlentities',$linha); echo json_encode($safe); } ?>

Resultado da string para o cep 21940010:

{"0":"342498","cd_logradouro":"342498","1":"12226","cd_bairro":"12226","2":"1","cd_tipo_logradouros":"1","3":"Rua Abélia","logradouro":"Rua Abélia","4":"21940010","no_logradouro_cep":"21940010","5":"12226","6":"7043","cd_cidade":"7043","7":"Jardim Guanabara","bairro":"Jardim Guanabara","8":"19","cd_uf":"19","9":"7043","10":"Rio de Janeiro","cidade":"Rio de Janeiro","11":"19","12":"RJ","uf":"RJ","13":"Rio de Janeiro","ds_uf_nome":"Rio de Janeiro"}

Reparem que o logradouro está correto, ou seja, Rua Abélia, mas na hora que é carregado no formulário muda para: Rua Ab&eacute;lia. Já tentei de tudo, as tags com iso, com utf, a função unescode, htmlentities, mas não consegui resolver.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17385
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Problemas com acentuação JSON PHP

01-03-2011 14:43

O htmlentities que faz esse problema, já tentou tirar?

Também não vejo a necessidade desse trecho

mb_internal_encoding("UTF-8"); mb_http_output( "iso-8859-1" ); ob_start("mb_output_handler");    

Acho que deve manter só o header iso
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 7

Problemas com acentuação JSON PHP

01-03-2011 15:07

Sem o htmlentities quando faço o encode_json os campos com acento aparecem com resultado null.
Os demais linhas acrescentei depois de ver algumas dicas em outros foruns sobre o mesmo problema, mas também não resolveu, mesmo utilizando só o header. Realmente abri o tópico porque não encontrei solução. Vamos ver se juntos conseguimos.

Abraço,

Jorge.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17385
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Problemas com acentuação JSON PHP

01-03-2011 15:13

Segundo a função array_map
http://php.net/manual/en/function.array-map.php

Seu código está usando o htmlentities para filtrar os valores do array $linha
$safe = array_map('htmlentities',$linha); echo json_encode($safe);

Segundo consta no link acima, você pode usar o valor null

$safe = array_map(null, $linha);
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 7

Problemas com acentuação JSON PHP

02-03-2011 23:22

Colocando o valor null como parâmetro, a string retorna null nos campos que contém acentos ou caracteres especiais.
Veja o que acontece para o cep 21940010 referente ao Logradouro Rua ABélia:

"0":"342498", "cd_logradouro":"342498", "1":"12226", "cd_bairro":"12226", "2":"1","cd_tipo_logradouros":"1", "3":null,"logradouro":null,"4":"21940010","no_logradouro_cep":"21940010","5":"12226", "6":"7043","cd_cidade":"7043", "7":"Jardim Guanabara", "bairro":"Jardim Guanabara", "8":"19","cd_uf":"19","9":"7043", "10":"Rio de Janeiro", "cidade":"Rio de Janeiro", "11":"19","12":"RJ","uf":"RJ", "13":"Rio de Janeiro","ds_uf_nome":"Rio de Janeiro"}

No campo correspondente ao Logradouro retorna Null, enquanto que com o 'htmlentities' retorna Rua Abélia. O problema está na hora de carregar esse valor no campo correspondente do formulário, onde o retorno é Rua Ab&eacute;lia.
Vou continuar tentando outras alternativas, mas tá difícil. Será que pode ser alguma configuração do servidor? Estou testando em localhost, mas não testei o código ainda em um servidor online.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17385
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Problemas com acentuação JSON PHP

03-03-2011 09:10

Tem como você me mandar uma base desse seu script zipada para eu testar aqui offline? Tipo, uma linha do bd, o script que chama os dados, etc...
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 7

Problemas com acentuação JSON PHP

10-03-2011 08:13

Coloquei os arquivos no link ao lado: Arquivos

Abraço,

Jorge.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17385
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Problemas com acentuação JSON PHP

10-03-2011 11:27

Vou conferir, testar e dou um retorno.
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17385
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Problemas com acentuação JSON PHP

10-03-2011 11:47

Seus arquivos são pesados demais, vou demorar anos para conseguir importar. Então, vou te passar uma versão que pode dar certo para o arquivo pega_cep.php

<?php header("Content-Type: text/html; charset=ISO-8859-1",true); $cep= $_GET['cep']; // RETIRADO //mb_internal_encoding("UTF-8"); // COLOCADO mb_internal_encoding("iso-8859-1"); mb_http_output( "iso-8859-1" ); ob_start("mb_output_handler"); include 'conexao.php'; $query=mysql_query("Select * from logradouros log left join bairro bai on log.cd_bairro=bai.cd_bairro left join cidade cid on bai.cd_cidade=cid.cd_cidade left join uf uf on cid.cd_uf=uf.cd_uf where log.no_logradouro_cep = '$cep'"); $teste=mysql_num_rows($query); if ($teste!=0){ $linha=mysql_fetch_array($query); $safe = array_map('htmlentities',$linha); echo json_encode($safe); } ?>

Caso não der certo, desativa essas linhas

mb_internal_encoding("iso-8859-1");
mb_http_output( "iso-8859-1" );
ob_start("mb_output_handler");
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 7

Problemas com acentuação JSON PHP

18-03-2011 21:06

Infelizmente o problema continua.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17385
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Problemas com acentuação JSON PHP

18-03-2011 21:30

Tenta adaptar seus dados a esse script
Base-autocomplete-JSON-jQuery-MySQL_19_4973.html
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 7

Problemas com acentuação JSON PHP

25-03-2011 13:11

Mesmo com esse código o problema persiste.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17385
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Problemas com acentuação JSON PHP

25-03-2011 13:14

Com esse script que indiquei, colocou na página da consulta um header ISO?
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 7

Problemas com acentuação JSON PHP

25-03-2011 15:27

Descobri a solução para o problema.
Quem tiver um problema semelhante é só verificar a url: http://battisti.etc.br/2011/02/28/jquer ... lentities/ e adaptar o código.

Valeu pelas dicas!

Abraço,

Jorge.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17385
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Problemas com acentuação JSON PHP

25-03-2011 15:53

Legal. :clap:

Deixo aqui uma referência

$(document).ready(function(){ // faz uma chamada em ajax para preencher os dados da pessoa var url = "urldosistema"; $.getJSON(url, function(json) { $('#codigo).val(json.codigo); var nome = json.nome; var a = $('#nome').html(nome).text(); $('#nome').val(a); }); });

0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado