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”.

8 respostas para “Problema Json e Acentuação – Retornando null”

  1. 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]

  2. 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.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*