Ir para o conteúdo
polska

Converter chars especiais para UTF-8

Mensagens Recomendadas

polska

Boas pessoal, estou a fazer um pequeno teste onde tenho um ficheiro php que me devolve todos os utilizadores de uma base de dados em formato json . Se não houver utilizadores, o json retornado é suposto ser:

Array ( [sucesso] => 0 [erro] => 1 [msg_erro] => Não existem utilizadores na base de dados! )

O que acontece é que a mensagem de erro contem aquele 'ã', ou seja, um char especial, eu já usei a função utf8_encode e a mb_convert_encoding mas elas não resolvem o problema na totalidade, pois a mensagem enviada chega assim:

Array ( [sucesso] => 0 [erro] => 1 [msg_erro] => Não existem utilizadores na base de dados! )

Consigo contornar isto substituindo o 'ã' por "& atilde;" , o problema é que eu não posso fazer isto quando receber nomes com chars especiais da base de dados..

Alguma ajuda ?

<?php

function getUsers() {

	require_once 'connection.php';
	mysql_select_db($con_database, $con) or die("erro mysql_select_db() -> users.php");	

	$users = array();
	$resposta = array("sucesso" => 0, "erro" => 0);

	$query = "SELECT * FROM utilizador WHERE nome = 'queroQueDeErro'";
	$result = mysql_query($query);
	$rows = mysql_num_rows($result);

	if($rows > 0) {
		$resposta["sucesso"] = 1;
		while($row = mysql_fetch_assoc($result)) {
			$users[] = array("cod" => $row["cod_utilizador"],
							 "password" => $row["password"],
							 "nome" => utf8_encode($row["nome"]),
							 "rank" => $row["tipo_utilizador"]);
		}
		$resposta["utilizadores"] = $users;
	} else {
		$resposta["erro"] = 1;
		/*$value = mb_convert_encoding("Não existem utilizadores na base de dados!", "UTF-8");*/
		$value = utf8_encode('Não existem utilizadores na base de dados!');
		$resposta["msg_erro"] = $value;
	}

	return json_encode($resposta);
}

/*
$fp = fopen('resultados.json', 'w');
fwrite($fp, json_encode($resposta));
fclose($fp);
*/

?>


Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
I-NOZex

e na base de dados, aparece o caracter estranho, ou está bem colocado?

define as headers no html para charset utf-8, verifica se o ficheiro esta salvo em UTF8 without BOM, e define tambem headers no php para charset utf8, bem como na ligaçao a base de dados...


B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
polska

e na base de dados, aparece o caracter estranho, ou está bem colocado?

define as headers no html para charset utf-8, verifica se o ficheiro esta salvo em UTF8 without BOM, e define tambem headers no php para charset utf8, bem como na ligaçao a base de dados...

Problema resolvido ! Já tinha definido o charset no ficheiro de conexão à bd, faltava mesmo o header ! Obrigado :)

header('Content-Type: text/html; charset=utf-8');

Editado por polska

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
polska

Problema resolvido ! Já tinha definido o charset no ficheiro de conexão à bd, faltava mesmo o header ! Obrigado :)

header('Content-Type: text/html; charset=utf-8');

Actually no, afinal não está resolvido, esqueci-me de testar quando recebo mesmo dados da base de dados.. os nomes vêm mal formatados.. eu estou a fazer o charset no ficheiro de conexão:

$charset = mysql_set_charset('utf8');

E no código, como pode ser visto a cima, estou a fazer o encoding dos nomes recebidos.. Ainda assim, por exemplo 'João', vem como 'João'

Editado por polska

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Virneto

Podes aceder à tua bd por terminal e verificar se lá, os caracteres estão corretos?

Se estiverem, verifica que estás a salvar o teu ficheiro com Codificação de Caracteres UTF-8, conforme já sugeriu o NOzes :P...


"Que inquieto desejo vos tortura, Seres elementares, força obscura? Em volta de que ideia gravitais?" >> Anthero de Quental

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Linuxando.com | ...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
polska

Podes aceder à tua bd por terminal e verificar se lá, os caracteres estão corretos?

Se estiverem, verifica que estás a salvar o teu ficheiro com Codificação de Caracteres UTF-8, conforme já sugeriu o NOzes :P...

Sim, os ficheiros estão gravados com Codificação UTF-8 , sem BOM como o NOZ disse, na base de dados os caracteres estão todos direitinhos, mas não estou a aceder por terminal, faz diferença ? :D


Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Virneto

Acho que não. Desde que não estejas aaceder pelo mesmo ficheiro :cheesygrin:

Eu estava a pensar que o teu primeiro erro era de um echo que nem vinha da BD, daí estar a confirmar.

Se tens os dados direitinhos na BD então tu é que estás a dar cabo deles pelo caminho :D

Se configuraste a conexão para UTF-8, tens os headers do php corretos e no head do teu html também, já experimentaste dar um echo ao nome assim que os dados chegam da bd, naquele while para ver se o "João" vem correto?


"Que inquieto desejo vos tortura, Seres elementares, força obscura? Em volta de que ideia gravitais?" >> Anthero de Quental

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Linuxando.com | ...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
polska

Acho que não. Desde que não estejas aaceder pelo mesmo ficheiro :cheesygrin:

Eu estava a pensar que o teu primeiro erro era de um echo que nem vinha da BD, daí estar a confirmar.

Se tens os dados direitinhos na BD então tu é que estás a dar cabo deles pelo caminho :D

Se configuraste a conexão para UTF-8, tens os headers do php corretos e no head do teu html também, já experimentaste dar um echo ao nome assim que os dados chegam da bd, naquele while para ver se o "João" vem correto?

Hmm.. não tinha testado com o echo, mas graças a isso já descobri o que se passa ... Bem basicamente não preciso de fazer o utf8_encode ao nome porque ele já vem direitinho da BD devido ao header estar definido... o que é estranho porque devia ser devido ao eu ter definido o charset no ficheiro de conexão, não :D ?

Aqui fica o código certinho:

Conexão:

<?php
$con_host = "localhost";
$con_database = "esdah_connect";
$con_username = "root";
$con_password = "";

$con = mysql_pconnect($con_host, $con_username, $con_password) or die("Erro mysql_pconnect() -> connection.php");
$charset = mysql_set_charset('utf8');
?>

users:

<?php

function getUsers() {

	header('Content-Type: text/html; charset=utf-8');
	require_once 'connection.php';
	mysql_select_db($con_database, $con) or die("erro mysql_select_db() -> users.php");	

	$users = array();
	$resposta = array("sucesso" => 0, "erro" => 0);

	$query = "SELECT * FROM utilizador";
	$result = mysql_query($query);
	$rows = mysql_num_rows($result);

	if($rows > 0) {
		$resposta["sucesso"] = 1;
		while($row = mysql_fetch_assoc($result)) {
			$users[] = array("cod" => $row["cod_utilizador"],
							 "password" => $row["password"],
							 "nome" => $row["nome"],
							 "rank" => $row["tipo_utilizador"]);
		}
		$resposta["utilizadores"] = $users;
	} else {
		$resposta["erro"] = 1;
		$value = utf8_encode('Não existem utilizadores na base de dados!');
		$resposta["msg_erro"] = $value;
	}

	return json_encode($resposta);
}

?>

reading:

<?php
require_once 'users.php';

$users = getUsers();
$resposta = json_decode($users, true);

print_r($resposta);
?>

Editado por polska
  • Voto 1

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.