Palavras acentuadas com ajax
No javascript existe uma função semelhante, a encodeURI e decodeURI. Porém existem agumas diferenças à rawurlencode e também as duas funções foram adicionadas no Javascript 1.5, sendo incompativel com alguns navegadores.
Abaixo eu mostro as duas funções em javascript que eu criei que fazem o mesmo trabalho que as funções em php.
JS->url_encode = PHP->rawurlencode
JS->url_decode = PHP->rawurldecode
Com essas 4 funções, você consegue codificar e decodificar os dados, tanto com javascript, como com o php.
Então tudo que for texto que você for enviar através da url usando ajax, você codifica antes com url_encode(), e na página php, você decodifica com rawurldecode(). E tudo que você retornar de texto na página php para o ajax, você codifica com rawurlencode() e decodifica no javascript com url_decode().
Um exemplo do que falei (somente as partes que usam essas funções), o exemplo completo está na outra página.
Código Ajax:
Abaixo eu mostro as duas funções em javascript que eu criei que fazem o mesmo trabalho que as funções em php.
<script type="text/javascript"> // url_encode version 1.0 function url_encode(str) { var hex_chars = "0123456789ABCDEF"; var noEncode = /^([a-zA-Z0-9\_\-\.])$/; var n, strCode, hex1, hex2, strEncode = ""; for(n = 0; n < str.length; n++) { if (noEncode.test(str.charAt(n))) { strEncode += str.charAt(n); } else { strCode = str.charCodeAt(n); hex1 = hex_chars.charAt(Math.floor(strCode / 16)); hex2 = hex_chars.charAt(strCode % 16); strEncode += "%" + (hex1 + hex2); } } return strEncode; } // url_decode version 1.0 function url_decode(str) { var n, strCode, strDecode = ""; for (n = 0; n < str.length; n++) { if (str.charAt(n) == "%") { strCode = str.charAt(n + 1) + str.charAt(n + 2); strDecode += String.fromCharCode(parseInt(strCode, 16)); n += 2; } else { strDecode += str.charAt(n); } } return strDecode; } </script>
JS->url_encode = PHP->rawurlencode
JS->url_decode = PHP->rawurldecode
Com essas 4 funções, você consegue codificar e decodificar os dados, tanto com javascript, como com o php.
Então tudo que for texto que você for enviar através da url usando ajax, você codifica antes com url_encode(), e na página php, você decodifica com rawurldecode(). E tudo que você retornar de texto na página php para o ajax, você codifica com rawurlencode() e decodifica no javascript com url_decode().
Um exemplo do que falei (somente as partes que usam essas funções), o exemplo completo está na outra página.
Código Ajax:
<script type="text/javascript"> ... xmlhttp.open("GET", "teste.php?texto=" + url_encode("teste... éé"), true); ... if (xmlhttp.status == 200) { document.getElementById("texto").innerHTML = url_decode(xmlhttp.responseText); } ... </script>
E aí Júlio...
Bom, essa minha solução realmente está ultrapassada. Eu criei isso logo no início da era ajax.
Existem comandos específicos do javascript para fazer isso como "escape" e "unescape".
Bom, mas essa sua solução vai ter problemas em alguns casos, como os dados serem enviados em outro formato diferente do ISO-8859-1, já que isso pode ser definido pelo navegador. Então usuários de outros países, ou até mesmo navegadores diferentes podem dar erro.
Recomendo vc a começar a usar comandos como eu mencionei logo acima.
Falou,
Fabrício
Bom, essa minha solução realmente está ultrapassada. Eu criei isso logo no início da era ajax.
Existem comandos específicos do javascript para fazer isso como "escape" e "unescape".
Bom, mas essa sua solução vai ter problemas em alguns casos, como os dados serem enviados em outro formato diferente do ISO-8859-1, já que isso pode ser definido pelo navegador. Então usuários de outros países, ou até mesmo navegadores diferentes podem dar erro.
Recomendo vc a começar a usar comandos como eu mencionei logo acima.
Falou,
Fabrício
12/10/2006 9:35am
(~18 anos atrás)
Apenas coloque no começo da página da onde que vem os dados
header("Content-Type: text/html; charset=ISO-8859-1",true);
Eu conselho por isso em todas as páginas não só as usadas para o ajax assim você não corre perigo de alguma coisa "estragar" os seus textos em português (Acentuados)... ;)
header("Content-Type: text/html; charset=ISO-8859-1",true);
Eu conselho por isso em todas as páginas não só as usadas para o ajax assim você não corre perigo de alguma coisa "estragar" os seus textos em português (Acentuados)... ;)
11/10/2006 10:21pm
(~18 anos atrás)
Funcionou no IE versao 6 com SP2 e no linux no mozzila versão 1.4. Ja no conqueror não teve acordo, não conseguiu instanciar o objeto XMLHttpRequest.
11/06/2006 3:14pm
(~18 anos atrás)
1) no js, o link de chamada para o form :
saveTopic: function() {
formulario = document.cadastra.elements;
param = ajax.camposForm(formulario);
// alert(param);
xmlhttp.open('POST', 'avaliacaoGrava.php', true);
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.onreadystatechange = ajax.respostasCadastro;
var param = unescape(param.replace(/\+/g," "));
xmlhttp.send(param);
},
no php, tratamento pra gravar na base de dados:
$fName = utf8_decode (trim($_POST['nome']));
$fTitle = utf8_decode (trim($_POST['titulo']));
$fEmail = utf8_decode ($_POST['email']);
$fText = utf8_decode (trim($_POST['texto']));
feito isso foi so gravar na base de dados e tudo funcionou perfeito.
saveTopic: function() {
formulario = document.cadastra.elements;
param = ajax.camposForm(formulario);
// alert(param);
xmlhttp.open('POST', 'avaliacaoGrava.php', true);
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.onreadystatechange = ajax.respostasCadastro;
var param = unescape(param.replace(/\+/g," "));
xmlhttp.send(param);
},
no php, tratamento pra gravar na base de dados:
$fName = utf8_decode (trim($_POST['nome']));
$fTitle = utf8_decode (trim($_POST['titulo']));
$fEmail = utf8_decode ($_POST['email']);
$fText = utf8_decode (trim($_POST['texto']));
feito isso foi so gravar na base de dados e tudo funcionou perfeito.
11/06/2006 3:11pm
(~18 anos atrás)
Percebi que cada um tem uma solução para isso.
Bom la vai a minha simples pratica e funcional.
aonde for gerar o xml coloca <?= urlencode($variavel);?>
no javascript q vai retornar por exempro
lista = document.getElementById('layer_resultado');
lista.innerHTML=unescape(conteudo).replace(/\+/g,' ')
basta dar replace e pronto acentuacao tudo ok ;)
uso essa solucao e nao tenho problemas
outra dica
para espaços como
no xml vc preciza por assim: %26nbsp;
;))) vlw fuiz
Bom la vai a minha simples pratica e funcional.
aonde for gerar o xml coloca <?= urlencode($variavel);?>
no javascript q vai retornar por exempro
lista = document.getElementById('layer_resultado');
lista.innerHTML=unescape(conteudo).replace(/\+/g,' ')
basta dar replace e pronto acentuacao tudo ok ;)
uso essa solucao e nao tenho problemas
outra dica
para espaços como
no xml vc preciza por assim: %26nbsp;
;))) vlw fuiz
28/03/2006 6:15am
(~18 anos atrás)
Pessoal, resolvi este problema de uma forma muitooo simples. Na página que contém o formulário de envio de dados usei o seguinte cabeçalho:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
Desta forma estamos identificando a codificação dos dados da página corrente para UTF-8, e não o ISO (que é muito comum ser tomado como padrão).
Logo, quando vc escrever algo no formulário e enviar para o banco de dados, ele já vai codificado pra UTF-8, e na volta, sua página irá retornar certinho, pq com essa META TAG, ela irá interpretar o conjunto de símbolos.
Resumindo, não precisa criar função em JS pra interpretar o texto. Bom, certifique-se de colocar esse Header acima, tanto nas páginas q contém os formulários, como nas páginas que serão Lidos os dados. Assim vc irá Escrever em UTF-8 e depois Ler em UTF-8.
Desculpe-me escrever meio rápido, mas é o sono. Qq dúvida escrevam-me.
[]s
Felipe Hlibco
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
Desta forma estamos identificando a codificação dos dados da página corrente para UTF-8, e não o ISO (que é muito comum ser tomado como padrão).
Logo, quando vc escrever algo no formulário e enviar para o banco de dados, ele já vai codificado pra UTF-8, e na volta, sua página irá retornar certinho, pq com essa META TAG, ela irá interpretar o conjunto de símbolos.
Resumindo, não precisa criar função em JS pra interpretar o texto. Bom, certifique-se de colocar esse Header acima, tanto nas páginas q contém os formulários, como nas páginas que serão Lidos os dados. Assim vc irá Escrever em UTF-8 e depois Ler em UTF-8.
Desculpe-me escrever meio rápido, mas é o sono. Qq dúvida escrevam-me.
[]s
Felipe Hlibco
26/03/2006 10:37pm
(~18 anos atrás)
Quebrou um galhão... Funcionou perfeitamente... E olha que tava dando muito pau..
Valeu!
Valeu!
25/03/2006 10:41am
(~18 anos atrás)
Funciona perfeitamente comigo se eu colocar um HTMLEntities nas saídas, antes de passar pelo Java...
Fica uma beleeeeeza! =)
Fica uma beleeeeeza! =)
22/03/2006 4:44pm
(~18 anos atrás)
EX:
<option value="*"><? echo ucfirst(utf8_encode($string)) ?></option>
É isso ae, espero ter ajudado
Abraços a todos