+2

Palavras acentuadas com ajax

criado por Fabrício Nogueira Magri em 25/01/2006 6:49am
Na linguagem de programação PHP, já existe a função que faz essa codificação e decodificação dos caracteres para serem enviados pela url.
São elas:
rawurlencode - http://br2.php.net/rawurlencode (para codificar)
rawurldecode - http://br2.php.net/rawurldecode (para decodificar)

Um exemplo para entenderem como funciona
<?php 
if (isset($_GET["texto"])) { 
    $texto = $_GET["texto"]; 
    echo "Texto codificado: " . rawurlencode($texto) . "<br>"; 
    echo "Texto decodificado: " . rawurldecode($texto) . "<br><br>"; 
} 
?> 
<a href="?texto=<?= rawurlencode("Teste... éáí+#@") ?>">Enviar texto</a>


Algumas pessoas podem perguntar, porque a função rawurlencode e não urlencode?
- Com a função urlencode, o caracter de espaço é trocado pelo sinal de +, já com rawurlencode, é trocado por %20, seguindo o mesmo padrão dos outros caracteres.

No caso eu quis seguir o padrão do rawurlencode. Nada impede de alguém alterar as funções em javascript para trabalhar como o urlencode.

Comentários:

Mostrando 1 - 10 de 31 comentários
Eduardo Nunes disse:
eu encontrei a solução para esse problema simplesmente utilizando a funcao utf8_encode() antes de exibir o resultado.


EX:

<option value="*"><? echo ucfirst(utf8_encode($string)) ?></option>


É isso ae, espero ter ajudado

Abraços a todos
21/10/2006 4:43am (~17 anos atrás)

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
12/10/2006 9:35am (~17 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)... ;)
11/10/2006 10:21pm (~17 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.
11/06/2006 3:11pm (~18 anos atrás)

Cara isso caiu do seu, execelente msm valew cara!
07/05/2006 8:45pm (~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 &nbsp;
no xml vc preciza por assim: %26nbsp;

;))) vlw fuiz
28/03/2006 6:15am (~18 anos atrás)

Felipe Hlibco disse:
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
26/03/2006 10:37pm (~18 anos atrás)

Quebrou um galhão... Funcionou perfeitamente... E olha que tava dando muito pau..
Valeu!
25/03/2006 10:41am (~18 anos atrás)

a disse:
Funciona perfeitamente comigo se eu colocar um HTMLEntities nas saídas, antes de passar pelo Java...

Fica uma beleeeeeza! =)
22/03/2006 4:44pm (~18 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)