Jump to content
polska

Converter chars especiais para UTF-8

Recommended Posts

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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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');

Edited by polska

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

Share this post


Link to post
Share on other 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'

Edited by polska

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

Share this post


Link to post
Share on other 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 | ...

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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 | ...

Share this post


Link to post
Share on other 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);
?>

Edited by polska
  • Vote 1

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.