Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matias Rezende

[Resolvido] Acentuação - PHP, MySQL e Prototype

Recommended Posts

Galera, boa noite.

 

Estou com um problema com acentuação. Estou usando ISO-8859-1, com PHP, Prototype e MySql. Na metta do HTML está assim:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Estou declarando nas funções do Javascript assim:
function enviaForm(div, pagina) {
	new Ajax.Updater (div,pagina,{encoding: 'iso-8859-1', evalScripts:true, parameters: $('formulario').serialize()});
}
Na configuração do Prototype está assim:
Ajax.Base = Class.create({
  initialize: function(options) {
	this.options = {
	  method:	   'post',
	  asynchronous: true,
	  contentType:  'application/x-www-form-urlencoded',
	  encoding:	 'iso-8859-1',
	  parameters:   '',
	  evalJSON:	 true,
	  evalJS:	   true
	};
No MySql estou usando InnoDB (não sei se influencia no acento) e Charset = latin1 - Collation = latin1_swedish_ci.

 

Quando envio um form, se eu dou um print_r nos valores do array post ele mostra tudo certinho. No INSERT do MySql também fica certo, com os acentos.

Quando cadastra no banco, fica assim 'José Carlos' (isso é José Carlos). Quando faço a consulta, ele exibe assim 'Jos� Carlos'.

 

Alguém sabe me dizer aonde pode estar o erro, e como fazer pra resolver?

Estou quase quebrando tudo, de tanta raiva... Já procurei por tudo na NET, não achei nenhuma solução definitiva...

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

new Ajax.Updater (div,pagina,{encoding: 'iso-8859-1', evalScripts:true, parameters: $('formulario').serialize()});
Amigo assim não irá funcionar, apenas com PHP você conseguirá, faça assim:

<?php
header('Content-type: text/html; charset=iso-8859-1');

Seu código restante...
?>

o HEADER deve sempre ficar no topo acima de qualquer STRING "imprimida".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara tenta assim:

 

no seu arquivo q se conecta ao banco use isso:

 

mysql_connect("localhost", "user", "123") or die("Não pude conectar");

mysql_select_db("tabela") or die("Não pude selecionar o banco de dados");

 

function func_ConvertToHTML ( $string ) {

$strlen = strlen ( $string ) ;

$return = '' ;

for ( $str_pos = 0 ; $str_pos < $strlen ; $str_pos++ ) {

$char = substr ( $string , $str_pos , 1 );

$ascii = ord ( $char );

if ( $ascii >> 5 == 6 ) {

$char2 = substr ( $string , ++$str_pos , 1 );

$ascii2 = ord ($char2);

$ascii &= 31 ;

$ascii2 &= 63 ;

$ascii2 |= ( ($ascii & 3 ) << 6 ) ;

$ascii >>= 2 ;

$return .= '' . str_pad ( dechex( $ascii ) , 2 , '0' , STR_PAD_LEFT ) . str_pad ( dechex( $ascii2 ) , 2 , '0' , STR_PAD_LEFT ) . ';' ;

} else {

$return .= $char;

}

}

return $return;

}

 

e toda vez que voce precisar exibir alum texto vindo do banco coloque isso: func_ConvertToHTML

 

Derepente resolve! hehehe!

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda.

Acabei resolvendo de uma forma meio POG, mas foi o que deu certo. Usei a idéia do silverfox

header('Content-type: text/html; charset=iso-8859-1');

Também tive que colocar uma função pra substituir os códigos que estavam aparecendo meio locos. Achei na net, só que esqueci de qual página eu peguei (para dar os créditos).

 

function fix_string ( $string ) {
	$pattern = array( 'ã', 'á', 'à ', 'â', 'Â', 'À', 'Ã<81>', 'Ã', 'Ê', 'È', 'É', 'ê', 'é', 'è', 'Ã<8d>', 'ÃŒ', 'Ĩ', 'ÃŽ', 'Ã', 'ì', 'î', 'Ä©', 'ô', 'õ', 'ó', 'ò', 'ô', 'Ô', 'Õ', 'Ó', 'Ó', 'û', 'ú', 'Å©', 'ù', 'u', 'Û', 'Ú', 'Ù', 'Ũ', 'ç', 'Ç' );
	$replace = array( 'ã', 'á', 'à', 'â', 'Â', 'À', 'Á', 'Ã', 'Ê', 'È', 'É', 'ê', 'é', 'è', 'Í', 'Ì', 'I~', 'Î', 'í', 'ì', 'î', 'i~', 'ô', 'õ', 'ó', 'ò', 'ô', 'Ô', 'Õ', 'Ó', 'Ó', 'û', 'ú', 'u~', 'ù', 'u', 'Û', 'Ú', 'Ù', 'U~', 'ç', 'Ç' );
	return str_replace( $pattern, $replace, $string );
}

Agora está funcionando.

 

RESOLVIDO

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.