Ir para conteúdo

POWERED BY:

Arquivado

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

gustavopinent

[Resolvido] Codificar os dados ou não?

Recommended Posts

Olá. Fazia tempos que eu não aparecia, estava estudando...

 

Fiz um sistema em php / mySQL e agora estou construindo uma interface AJAX para o sistema. Em php é mais tranquila a questão dos caracteres especiais, trabalho só em UTF-8 e os acentos não dão problema, apenas alguns caracteres como "&". Em AJAX, tenho que passar os dados para o php e já é uma outra fonte de problemas. Pensei em codificar em hexadecimal, tipo uma linha query string, segundo o que eu li nesse ótimo artigo:

 

http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

 

Os textos ficariam bastante alterados. A questão é: decodificar ao receber no php antes de enviar para o mySQL ou mandar assim mesmo?

 

Se eu não decodificar, será mais seguro, penso eu; Mas se eu decodificar, fica mais "limpinho" dentro da base, posso editar direto, e usar os resultados de uma query sem ter que decodificar toda a vez.

 

Como estou desenvolvendo sozinho, gostaria de saber a opinião de outros desenvolvedores. O que vocês adotam como solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em AJAX, tenho que passar os dados para o php e já é uma outra fonte de problemas.

 

pq você está tendo problemas ?

e quais problemas você está tendo ?

 

 

se trabalhar em UTF8, ajax envia por default em UTF8, e jSON é UTF8.. então você não deveria ter nenhum problema..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou dar um exemplo a partir do caracterzinho que eu citei. O formulário é o seguinte:

 

nome: Fulano & Cicrano Cia. LTDA

email: fulano@nonono.com.br

 

Em ActionScript, por exemplo, eu crio um objeto tipo:

 

objeto.nome = 'Fulano & Cicrano Cia. LTDA';

email: 'fulano@nonono.com.br';

 

Mando por POST e fim de papo. Mas em AJAX o método send do objeto xmlhttprequest enviará uma string:

 

nome=Fulano & Cicrano Cia. LTDA&email=fulano@nonono.com.br

 

Ooops, o "&" PODE da problema!

 

Também tive problemas ao trabalhar com XML onde aparecem <>/ e até outros símbolos, principalmente com IE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o & você deve codificar para

&

e o < você deve codificar para

<

 

e pronto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, então você de fato codifica antes de enviar para o php. Nesse caso, talvez o melhor fosse em hexa para tirar o & de campo já que ele está separando as variáveis (& => %26).

 

Em todo o caso, ao receber o dado no php, você decodifica para lança-lo na base, ou grava o registro com o dado codificado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu gosto de trabalhar com dados puros.

 

Apenas o & que mantenho na forma

&

por causa de problemas com o XML.

Tudo depende da exibição que você precisa. Não tem sentido codificar acentos por exemplo..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, pessoalmente eu tenho duas páginas rodando ajax que mandam dados para uma base e raramente dão problemas (dá erro porque um símbolo se confunde com os códigos). Talvez com correçoes simples em alguns códigos funcione. Mas meu objetivo é algo mais robusto, à prova de erros - se é que é possível. Pelo menos entre o ajax e o php, os dados passarão por uma conversão segundo a função abaixo, considerando caracteres de controle, reservados e "inseguros":

 

// Condifica em hexadecimal 8 bits
var encodeHEX = function(str){
// Tirando os % que serão usados para decodificar e os caracteres de controle
for(var i=0; i<str.length; i++){
	if(str.charCodeAt(i)<32 || str.charAt(i)=="%") {
		var hex = str.charCodeAt(i).toString(16);
		if(hex.length == 1) hex = "0"+hex;
		str = str.substr(0,i)+'%'+hex+str.substr(i+1);
	} 
}
// Agora sim os caracreres inseguros e reservados
var strTab = new Array(32,34,35,36,38,43,44,47,58,59,60,62,63,64,91,92,93,94,96,123,124,125,126,127);
for(var i=0; i<strTab.length; i++){
	while(str.indexOf(String.fromCharCode(strTab[i]))>=0){
		var ichr = str.indexOf(String.fromCharCode(strTab[i]));
		var hex = str.charCodeAt(ichr).toString(16);
		if(hex.length == 1) hex = "0"+hex;
		str = str.substr(0,ichr)+'%'+hex+str.substr(ichr+1);
	}
}
return str;
}

var decodeHEX = function(str){
var iicod = 0;
while(str.indexOf("%", iicod)>=0){
	var icod = str.indexOf("%", iicod);
	var hex = str.substr(icod+1,2);
	str = str.substr(0,icod)+String.fromCharCode(parseInt(hex,16))+str.substr(icod+3);
	var iicod = icod + 1;
}
return str;
}

O código foi testado e funcionou, mas talvez dê para otimizá-lo um pouco...

 

Já do php para mySQL, sou como o William, prefiro trabalhar com os dados puros. Os acentos não tem me dado mais nenhum problema depois que padronizei meu desenvolvimento em UTF-8.

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.