1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajax Caracteres Especiais Língua Portuguesa

Discussão em 'Web Development' iniciada por K0mA, 18 de Fevereiro de 2007. (Respostas: 4; Visualizações: 2888)

  1. K0mA

    K0mA Power Member

    TAGS:
    AJAX CARACTERES ESPECIAIS LÍNGUA PORTUGUESA PORTUGUÊS
    UTF8 iso-8859-1
    AJAX JAVASCRIPT PORTUGUESE SPECIAL CHARACTERS UTF8 iso-8859-1

    EDIÇÃO 3
    Queria partilhar com todos a minha (pouca) experiência com AJAX.

    Se algum de vós já se apercebeu do potencial de AJAX e quer usar esta 'linguagem' para textos em português vai-se deparar com um problema de codificação de carateres que, diga-se de passagem, é das coisas que mais detesto em programação.

    Quem quiser desenvolver uma simples ferramenta de sugestão como a do google usando caracteres especiais da nossa língua como à ou Ç terá de fazer o seguinte:

    Imaginemos que vocês escrevem qualquer coisa numa
    Código:
    <input type="text" name ="txt">
    e que depois, usando AJAX, vão chamar uma função que irá fazer qualquer coisa ao que escreveram (INPUT) e retornar um resultado (OUTPUT) para a página.

    A vossa função deverá ter 3 partes:
    1. identificar a entrada (input)
    2. fazer qualquer coisa com a entrada
    3. devolver a saída (output)
    EXEMPLO PARA PHP:
    1. Código:
      $q=$_GET["txt"];
    2. ... qualquer coisa ...
    3. Código:
      echo $resposta;
    Para que isto funcione com caracteres especiais terão de fazer o seguinte em 1. e 3. :

    em 1. adicionar (na linha a seguir)
    Código:
    $q=utf8_decode($q);
    em 2. adicionar (na linha antes)
    Código:
    $resposta =utf8_encode($resposta);
    RESUMINDO: input --> DECODE(input) --> qualquer coisa --> ENCODE(output) --> output

    Quando definem a variável url no ficheiro .js têm de codificar a parte que contém caracteres especiais, neste caso era
    Código:
    ?q=str
    com str = string de entrada. Usando a função de Javascript encodeURIComponent():

    Código:
    var url="meuajax.php";
    url=url+"?q="+[COLOR=Red]encodeURIComponent(str)[/COLOR];
    url=url+"&sid="+Math.random();
    
    PS: este código é disponibilizado sem qualquer garantia de funcionar para todos os casos, para mim funcionou!


    TESTADO com firefox 2.0 e IE7
    TESTADO com cabeçalho charset=utf-8 e charset=iso-8859-1
    TESTADO com caracteres especiais da língua portuguesa como Ç ã ô ... e outros como & < %


    Adaptado para caracteres especiais de www.w3schools.com

     
    Última edição: 19 de Fevereiro de 2007
  2. SoundSurfer

    SoundSurfer Power Member

    Essa solução só funciona se a página original vier em UTF-8 ...

    ou seja, o encode e decode que fazes tem de ser igual ao encoding que foi definido no "head" do html.

    Se puseres o encodeing da página como "iso-8859-1", esse método irá gerar caracteres estranhos na visualização.
     
  3. K0mA

    K0mA Power Member

    Acabou de funcionar mesmo agora com o seguinte cabeçalho:

    Código:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    
    <head>
    
    <meta http-equiv="Content-Language" content="pt">
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    ...
    
    Em firefox funciona, em IE7 não.
    Aliás em IE7 nem com cabeçalho nem sem cabeçalho.
     
    Última edição: 18 de Fevereiro de 2007
  4. SoundSurfer

    SoundSurfer Power Member

    Acho que, se funciona no firefox, é porque estás a gerar a página em UTF-8, mesmo com o cabeçalho... mas posso estar enganado...

    Já agora, só por curiosidade, passa a página no validator, a ver se ele dá um warning em como a tag de encoding não corresponde ao formato enviado.
     
  5. K0mA

    K0mA Power Member

    Parou de dar não sei onde mexi !!!!!
    EDIT1: Era o cabeçalho em firefox funciona em IE7 é que não :(
    EDIT2: Já funciona nos 2 ! (adicionada a correcção na primeira resposta)
    EDIT3: Remodelação do tópico e correcções adicionais
     
    Última edição: 19 de Fevereiro de 2007

Partilhar esta Página