Ir para conteúdo

POWERED BY:

Arquivado

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

Sandler Riot

Problema com charset - Como resolver?

Recommended Posts

Olá galera.

 

Preciso de uma orientação funcional e correta, de como trabalhar como charset ao usar PHP + MySQL.

 

Dúvidas:

 

- Uso em minhas páginas (PHP/HTML) padrão UTF-8.

- Qual padrão devo usar no meu banco?

- Os dados no meu banco, devem estar com ou sem htmlentities?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo.

 

Mas ai eu tenho um problea usando htmlentities, sabe qual?

 

Ex:

 

Tabela noticias, eu tenho as colunas: id, titulo, noticia.

 

beleza...

 

O campo noticia, leva o corpo da noticia, que tem códigos html como por ex: <p>, <strong> e etc... Com htmlentities, estes codigos não funcionam, eles são exibidos na pagina e não executados.

 

E ai?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando me referi ao htmlentities, me referi aos htmlentities do HTML, e não a função htmlentities() do PHP.

 

- O meu HTML esta em UTF8.

- O meu banco esta em UTF8/UFT8_general_ci

- No meu html, os textos estão escritos com acentuação, sem usar htmlentities.

- No meu banco, os textos estão gravados com acentuação, sem htmlentitities.

- Ao executar minha pagina html, meus textos do html estão normais, já os que vem do banco estão desconfigurados!

 

 

Será que o DataType tem algo haver? Estou usando tinytext para textos, é o correto?

 

Já tive uma longa tentativa de solução aqui, http://forum.imasters.com.br/index.php?showtopic=338652 mas não deu certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uso UTF-8 em ttudo e nunca tive problemas.

 

O banco sempre esteve com essa codificação? Ou você mudou depois de já haver dados cadastrados?

Tente usar isto no topo da página (ou num arquivo de inicialização, caso você use um):

 

header("Content-type: text/html; charset=utf-8", true);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo;

 

O banco foi criado em latin1, depois mudei para utf8.

 

Ex:

 

- No meu banco, tenho uma entrada que esta assim: PRODUÇÃO (sem codigos estranhos, sem htmlentities, acentuado puro e simplies).

 

- Ao tentar exibir isso no html, ele aparece assim: PRODU��O

 

Obs: Pagina html ta em utf, data base ta em utf, e já estou usando o header em utf.

 

Obs2: Se eu modificar charset para iso, o texto que bem do banco fica correto, porem estraga todo os outros textos estaticos do html.

 

Que m***** é esta?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funcionou.

 

Estou quase pirando com isso!

 

Como você falou, eu criei uma nova tabela, totalmente em UTF, cadastrei alguns valores (acentuados normalmente, sem htmlentities).

 

Ao puchar estes dados do banco e exibir na pagina, tenho isso:

 

Avi�o

 

Afff

 

pqp!!!

 

Cara... a pagina html ta com utf, ta o header, ta o banco... pq isso? puts...

 

obs: se eu mudo a pagina pra iso, funciona!

 

=/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, sério, não faço ideia.

 

Estou usando o Dreamweaver para editar os PHP, ele ta com padrão UTF.

 

E para editar o banco, uso o SQLYog, e mesmo indo no PHPMyAdmin ainda continua bugado.

 

Sabe o que eu vou fazer?

 

Vou mudar a codificação pra ISO de minha página.

 

Assim vou solucionar o problema dos dados que vem do banco, pq como te falei quando uso ISO eles ficam bom.

 

Mas vou ter que alterar tudo estatico na minha pagina para htmlentities.

 

=\

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim,

no db

ALTER TABLE nome_da_tabela ADD nome_do_campo VARCHAR( 5 ) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL;
no html

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Compartilhar este post


Link para o post
Compartilhar em outros sites

zetto33

 

Tem este tópico que trata do mesmo assunto. Não sei se vai te resolver, mas pode ser que ajude.

 

http://forum.imasters.com.br/index.php?showtopic=338652

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

As vezes o negócio agarra de um jeito que nenhuma das soluções apresentadas acima resolve.

 

O que fazer então?

 

Basta gravar no banco de dados a string com htmlentities ou seja, fazer a conversão dos caracteres acentuados para os caracteres do htmlentities, antes de gravar no banco de dados a string. Exemplo: á -> á

 

function converte_string($text, $debug_on){

	$acentuadas	= array('á', 'Á', 'ã', 'Ã', 'â', 'Â', 'à', 'À', 'é', 'É', 'ê', 'Ê', 'í', 'Í', 'ó', 'Ó', 'õ', 'Õ', 'ô', 'Ô', 'ú', 'Ú', 'ü', 'Ü', 'ç', 'Ç');
	$convertidas   = array('á', 'Á', 'ã', 'Ã', 'â', 'Â', 'à', 'À', 'é', 'É', 'ê', 'Ê',  'í', 'Í', 'ó', 'Ó', 'õ', 'Õ', 'ô', 'Ô', 'ú', 'Ú', 'ü', 'Ü', 'ç', 'Ç');
	$saida  = str_replace($acentuadas, $convertidas, $text);
	
	if ($debug_on){
		echo $saida;
		var_dump($saida);
	}
	
	return $saida;	  
}

Como usar essa função?

 

Supondo que você submeteu um formulário HTML com um textarea com nome field.

No script php que irá tratar o formulário basta aplicar a função definida acima, veja:

 

//todos os caracteres acentuados serao convertidos para htmlentities
$texto_convertido = converte_string($_POST['field']);

Depois disso é só executar a query e gravar a string no banco de dados.

O bom disso é que vai funcionar sempre, independente da condificação que você estiver usando.

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.