Página Inicial > HTML | PHP | JavaScript > Problema Json e Acentuação – Retornando null

Problema Json e Acentuação – Retornando null

Boa tarde pessoal. Essa semana tive um problema com o jquery autocomplete, que retornava NULL para as strings acentuadas. Fiz diversas buscas no google, por fim a solução foi muito simples.

Solução:

Exemplo da chamada do autocomplete:

$("#txNomePessoa").autocomplete({
				source: "autocompletarNomePessoa.php",
				minLength: 1,
				select: function( event, ui ) {
         			$("#txtIdPessoa").val(ui.item.codigo);
      			}
});

No arquivo autocompletarNomePessoa.php devemos adicionar a seguinte linha, antes da consulta sql

mysql_query('SET CHARACTER SET utf8');

O arquivo fica assim:

< ?php
$return_arr = array();
$dbhost = 'enderecodoservidor';
$dbuser = 'usuariodobanco';
$dbpass = 'senhadobanco';
$dbname = 'nomedobanco';
 
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
mysql_select_db($dbname);
/* If connection to database, run sql statement. */
if ($conn)
{
	mysql_query('SET CHARACTER SET utf8');
	$fetch = mysql_query("SELECT * FROM pessoas WHERE nomepessoa LIKE '%" . $_GET['term'] . "%'"); 
 
	/* Retrieve and store in array the results of the query.*/
 
	while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
		$row_array['label'] = $row['nomepessoa'];
		$row_array['value'] = $row['nomepessoa'];
		$row_array['codigo'] = $row['idpessoa'];
 
        array_push($return_arr,$row_array);
    }
 
}
/* Free connection resources. */
mysql_close($conn);
 
/* Toss back results as json encoded array. */
echo json_encode($return_arr);
?>

Espero ajudar muita gente com esse post, pois na internet tem muitas dúvidas sobre isso, e soluções meio “exageradas”.

  1. 27, janeiro, 2014 em 13:54 | #1

    Obrigado pela dica. Funcionou perfeitamente para mim. De fato, antes dessa, eu havia encontrado inúmeras dicas mirabolantes que faziam muita coisa menos resolver o problema. Valeu!

  2. Elias
    11, abril, 2014 em 11:04 | #2

    tu és o cara!!!! me salvou aqui!

  3. Thieberson
    6, setembro, 2014 em 23:29 | #3

    Sei que o post é antigo, mas como não funcionou comigo por causa da codificação que eu fazia ao inserir no BD, encontrei outra forma de fazer.

    No meu caso eu não inseri a linha mysql_query(‘SET CHARACTER SET utf8′);

    Apenas utilizei a função “htmlentities($array_destino, $conteudo)” para transformar a string antes de inseri-la no array.
    [code]
    while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
    $row_array['label'] = htmlentities($row['nomepessoa']);
    $row_array['value'] = htmlentities($row['nomepessoa']);
    $row_array['codigo'] = $row['idpessoa'];

    array_push($return_arr,$row_array);
    }
    [/code]

  4. 17, setembro, 2014 em 17:26 | #4

    Cara você salvou meu dia de trabalho!!! Agradeço demais!!!!

  5. Gustavo S.
    12, dezembro, 2014 em 15:10 | #5

    Bah. Me quebrou um galhão! Valeu!

  6. Danilo
    6, julho, 2015 em 16:13 | #6

    Cara,

    Mto obrigado, me ajudou mto !!!

    Vlw.

  7. Pablo Ramon Prediger Garay
    14, fevereiro, 2016 em 12:17 | #7

    Amigo, depois de muito pesquisar a tua solução foi a que resolveu o problema.
    Não precisei da linha: mysql_query(‘SET CHARACTER SET utf8′);
    Obrigado.

  1. Nenhum trackback ainda.
*