Encoding de uma requisição jQuery

310 views
Skip to first unread message

Adriano 'Stanley'

unread,
Jun 14, 2010, 11:17:24 PM6/14/10
to jque...@googlegroups.com
Fala galera!

Alguém sabe porque para alguns usuários isso acontece e para outros não: quando um usuário envia uma requisição em ajax as vezes vai com acentuação correta, as vezes os acentos vão errados. Sei que o problema é o encoding, mas como isso varia de usuário pra usuário, como faço pra garantir que o jQuery faça uma requisição SEMPRE utilizando UTF-8?

Com o Firebug, consigo ver que, aparentemente ela já está indo assim:
Content-Typetext/html;charset=UTF-8

*PS para alguns: já procurei no google.

Adriano Castro

Leo Balter

unread,
Jun 14, 2010, 11:28:31 PM6/14/10
to jque...@googlegroups.com
Ahhhh pegadinha do Mallandro, procurou no Google mas não na documentação do jquery! :P

Brincadeiras a parte:

http://api.jquery.com/jQuery.ajax/

A resposta é a opção: contentType

--
Você está recebendo esta mensagem porque se inscreveu no grupo "jQuery (Brasil)" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para jque...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para jquery-br+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/jquery-br?hl=pt-BR.

Jorge Hamaguchi

unread,
Jun 15, 2010, 7:35:42 AM6/15/10
to jQuery (Brasil)
Olá pessoal,

Incrivelmente estes dias estava pesquisando a respeito, por ter o
mesmo problema de encoding.
O Leo mencionou o contentType do Jquery, mas infelizmente ele não
funciona (pelo menos para mim) ehehhehe
Normalmente utilizava o famoso header("Content-Type: text/html;
charset=ISO-8859-1",true); do php para resolver o problema de
acentuação... mas tive problema ao fazer um projeto que não estava
dando resultado.

O meu problema é:
Antes de enviar para o arquivo ajax.php, a acentuação esta correta,
mas quando chega no arquivo ajax, ele chega com caracteres estranhos
no lugar da acentuação.
Consegui uma solução paliativa usando a função do php utf8_decode(),
passando todos meus $_POST na função: $_POST =
array_map('utf8_decode', $_POST);

Foi a única forma que funcionou no meu caso, porque mesmo eu setando
no contentType do Jquery, não funcionou.

Aproveitando, falando sobre o contentType do Jquery, ja havia visto na
documentação, mas o mesmo não se tem muito detalhe do funcionamento
dele, caso alguém tenha um exemplo melhor detalhado e das opções que
ele oferece, será muito bem vindo.

Jorge Hamaguchi





On 15 jun, 00:28, Leo Balter <leonardo.bal...@gmail.com> wrote:
> Ahhhh pegadinha do Mallandro, procurou no Google mas não na documentação do
> jquery! :P
>
> Brincadeiras a parte:
>
> http://api.jquery.com/jQuery.ajax/
>
> A resposta é a opção: contentType
>
> Em 15 de junho de 2010 00:17, Adriano 'Stanley'
> <adrianostan...@gmail.com>escreveu:
>
>
>
> > Fala galera!
>
> > Alguém sabe porque para alguns usuários isso acontece e para outros não:
> > quando um usuário envia uma requisição em ajax as vezes vai com acentuação
> > correta, as vezes os acentos vão errados. Sei que o problema é o encoding,
> > mas como isso varia de usuário pra usuário, como faço pra garantir que o
> > jQuery faça uma requisição SEMPRE utilizando UTF-8?
>
> > Com o Firebug, consigo ver que, aparentemente ela já está indo assim:
> > Content-Typetext/html;charset=UTF-8
>
> > *PS para alguns: já procurei no google.
>
> > Adriano Castro
>
> > --
> > Você está recebendo esta mensagem porque se inscreveu no grupo "jQuery
> > (Brasil)" dos Grupos do Google.
> > Para postar neste grupo, envie um e-mail para jque...@googlegroups.com.
> > Para cancelar a inscrição nesse grupo, envie um e-mail para
> > jquery-br+...@googlegroups.com<jquery-br%2Bunsubscribe@googlegroups .com>
> > .

Ruan Carlos

unread,
Jun 15, 2010, 7:59:05 AM6/15/10
to jque...@googlegroups.com
Exatamente isso, não funciona pra você.

Trabalhe em UTF-8. De nada.
-----------------------------------------------------------------
Ruan Carlos
@ruanltbg
www.ruancarlos.com.br
Desenvolvedor web


Para cancelar a inscrição nesse grupo, envie um e-mail para jquery-br+...@googlegroups.com.

Juarez Gonçalves Nery Junior

unread,
Jun 15, 2010, 8:25:19 AM6/15/10
to jque...@googlegroups.com

Leo Balter

unread,
Jun 15, 2010, 9:15:53 AM6/15/10
to jque...@googlegroups.com
Infelizmente tem empresas burrocráticas e/ou sistemas legados que mantém codificações diferentes. Já trabalhei bastante com esse problema, mas nunca esbarrei em problemas com o contentType do ajax.

Muitas vezes a solução também pode requerer o utf8_encode e decode do php.

Adriano 'Stanley'

unread,
Jun 15, 2010, 10:27:13 AM6/15/10
to jque...@googlegroups.com
Imagino que o problema seja o browser porque não acontece com todos os usuários, somente alguns. Isso pode acontecer? Sei lá, do browser do cara trabalhar com iso alguma coisa e como espero utf-8 ele não consegue acentuar direito a palavra no banco.

Nesses casos o content-type resolveria, certo??

Adriano Castro
http://www.enigmapremiado.com.br

Ruan Carlos

unread,
Jun 15, 2010, 10:45:52 AM6/15/10
to jque...@googlegroups.com
Não jogue o problema para os outros =D..

Na verdade o problema está na sua acentuação vc deve ter uns 3 tipos de encoding ai. Ai o navegador fica doidão, sem falar que o usuário pode trocar nas configurações.

-----------------------------------------------------------------
Ruan Carlos
@ruanltbg
www.ruancarlos.com.br
Desenvolvedor web


--

Adriano 'Stanley'

unread,
Jun 15, 2010, 12:10:54 PM6/15/10
to jque...@googlegroups.com
Então. Como eu faço pra garantir que tudo que está saindo do browser vá no UTF-8 mesmo estando ele configurado pra outro?

Adriano Castro
http://www.enigmapremiado.com.br

Ruan Carlos

unread,
Jun 15, 2010, 12:21:11 PM6/15/10
to jque...@googlegroups.com
Se o navegador estiver  configurado para outro ele verá no outro, não tem como mudar isso =D

-----------------------------------------------------------------
Ruan Carlos
@ruanltbg
www.ruancarlos.com.br
Desenvolvedor web


Adriano 'Stanley'

unread,
Jun 15, 2010, 12:25:53 PM6/15/10
to jque...@googlegroups.com
Mas então um utf8decode no servidor resolve? Independente do que vem??

Adriano Castro
http://www.enigmapremiado.com.br

Ruan Carlos

unread,
Jun 15, 2010, 12:40:43 PM6/15/10
to jque...@googlegroups.com
Não utf8 decode só serve para quando vem uma requisição utf8 e utf8 enconde  serve apenas para textos ANSI (se não me engano).

-----------------------------------------------------------------
Ruan Carlos
@ruanltbg
www.ruancarlos.com.br
Desenvolvedor web


Jorge Hamaguchi

unread,
Jun 15, 2010, 1:29:23 PM6/15/10
to jque...@googlegroups.com
Estou com uma dúvida, no caso de eu fizer tudo em utf-8, no banco vai
gravar com akeles caracteres estranhos no lugar dos acentos?

Em 15/06/10, Ruan Carlos<ruan...@gmail.com> escreveu:


> Não utf8 decode só serve para quando vem uma requisição utf8 e utf8 enconde
> serve apenas para textos ANSI (se não me engano).
> -----------------------------------------------------------------
> Ruan Carlos
> @ruanltbg
> www.ruancarlos.com.br
> Desenvolvedor web
>
>
> Em 15 de junho de 2010 13:25, Adriano 'Stanley'
> <adriano...@gmail.com>escreveu:
>
>> Mas então um utf8decode no servidor resolve? Independente do que vem??
>>
>>
>> Adriano Castro
>> http://www.enigmapremiado.com.br
>>
>> --
>> Você está recebendo esta mensagem porque se inscreveu no grupo "jQuery
>> (Brasil)" dos Grupos do Google.
>> Para postar neste grupo, envie um e-mail para jque...@googlegroups.com.
>> Para cancelar a inscrição nesse grupo, envie um e-mail para

>> jquery-br+...@googlegroups.com<jquery-br%2Bunsu...@googlegroups.com>

Ruan Carlos

unread,
Jun 15, 2010, 2:18:30 PM6/15/10
to jque...@googlegroups.com
Sim se a codificação do banco estiver em utf8 ele vai salvar em utf8

-----------------------------------------------------------------
Ruan Carlos
@ruanltbg
www.ruancarlos.com.br
Desenvolvedor web


Adriano 'Stanley'

unread,
Jun 15, 2010, 8:51:04 PM6/15/10
to jque...@googlegroups.com
Então teoricamente é impossível tratar esse tipo de situação e eu vou ter que pedir a todos os usuários de meu sistema que configurem seus browsers pra trabalhar com UTF-8?

Adriano Castro
http://www.enigmapremiado.com.br

Ruan Carlos

unread,
Jun 15, 2010, 10:08:22 PM6/15/10
to jque...@googlegroups.com
Não, o navegador pega por padrão a codificação que está definida na página, porém, o usuário pode trocar ela, na primeira vez q ele entrar vai estar na codificação que você colocou.

Por isso q eu digo, trabalhe TUDO em utf8

-----------------------------------------------------------------
Ruan Carlos
@ruanltbg
www.ruancarlos.com.br
Desenvolvedor web


Você está recebendo esta mensagem porque se inscreveu no grupo "jQuery (Brasil)" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para jque...@googlegroups.com.

Jorge Hamaguchi

unread,
Jun 16, 2010, 1:27:25 AM6/16/10
to jque...@googlegroups.com
Ruan, me desculpe se estarei sendo chato....
Mas tenho mais uma dúvida, caso utilize TUDO em utf-8, sendo assim, no
banco vai ser gravado com os caracteres especiais em vez da
acentuação, ok? No caso de eu ler o banco e jogar este conteúdo em um
input text por exemplo... ele virá com esses caracteres estranhos em
vez da acentuação?

De qualquer forma, gostaria que explicasse melhor, uma boa maneira de
se trabalhar para não ter problemas com acentuação usando a
codificação utf-8.

Fico com isso na cabeça pelo fato de estarmos no Brasil, um país com
sua língua oficial português, usar uma codificação que não condiz com
o mesmo, tendo uma codificação mais adequada para a língua como o
ISO-8859-1. Esta uma codificação de caracteres do alfabeto latino.
Fora que o banco fica zuado com aqueles caracteres totalmente fora de órbita.

t+

Em 15/06/10, Ruan Carlos<ruan...@gmail.com> escreveu:

>> jquery-br+...@googlegroups.com<jquery-br%2Bunsu...@googlegroups.com>

Ruan Carlos

unread,
Jun 16, 2010, 7:31:20 AM6/16/10
to jque...@googlegroups.com
Neste caso, como o banco é UTF8 E a página tbm. você terá que escrever obrigatoriamente em UTF8, ou seja, vai vir com os caracteres em UTF8 e irão ser mostrados em UTF8.

Vai vir é do banco e será mostrado na tela como é.

Esse é o grande problema do Brasil, a língua portuguesa, a nossa língua contém acentos, coisa que não ocorre com outras línguas como o inglês. E como não programamos (css / javascript / php / c# / java) em linguagens criada para o Brasil e sim para um âmbito internacional, devemos nos adequar a elas, ou seja, escrevê-las em inglês.

O UTF8 serve justamente para isso, universalizar. (vai, declara uma variável com acento =D)


-----------------------------------------------------------------
Ruan Carlos
@ruanltbg
www.ruancarlos.com.br
Desenvolvedor web


Jorge Hamaguchi

unread,
Jun 16, 2010, 8:24:30 AM6/16/10
to jque...@googlegroups.com
Beleza, entendi o esquema...

o problema é quando se tem uma tabela estática no banco, e vc popular
ela na mão ... por estar trabalhando em utf-8 vais ter q por com os
caracteres estranhos em vez dos acentos..

é uma naba mesmo...


Em 16/06/10, Ruan Carlos<ruan...@gmail.com> escreveu:

>> <jquery-br%2Bunsu...@googlegroups.com<jquery-br%252Buns...@googlegroups.com>

Ruan Carlos

unread,
Jun 16, 2010, 8:33:05 AM6/16/10
to jque...@googlegroups.com
sim, mas nada como ferramentas simples como notepad ++ que podem ajudar a fazer isso. Porém "não seria correto" você inserir dados diretamente no banco de dados.

-----------------------------------------------------------------
Ruan Carlos
@ruanltbg
www.ruancarlos.com.br
Desenvolvedor web


Hilton Gonçalves

unread,
Jun 16, 2010, 8:56:30 AM6/16/10
to jQuery (Brasil)
Segue ai algumas dicas ai:

no PHP set o cabeçalho
<?php header("Content-Type: text/html; charset=utf-8",true) ?> (o
true força o cabeçalho)

no .htaccess set o encoding (http://www.askapache.com/htaccess/setting-
charset-in-htaccess.html)
AddDefaultCharset UTF-8

ou

<FilesMatch "\.(php|htm|html|css|js)$">
ForceType 'text/html; charset=UTF-8' # o force da uma ajuda extra
</FilesMatch>

Aqui não tenho mais problemas com isso...

PS: qdo setava só no html tinha muitos problemas, mas como prevenção
nunca é demais segue:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Lembrando que é muito importante setar a IDE e DB tbm (como já citado
acima) para evitar mais problemas...

Abraços,


Hilton

Hilton Gonçalves

unread,
Jun 16, 2010, 9:14:07 AM6/16/10
to jQuery (Brasil)
Além das soluções já citadas, costumo usar o seguinte:

no HTML:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

no PHP:
<?php header("Content-Type: text/html; charset=utf-8",true) ?>

no.htaccess:
AddDefaultCharset UTF-8
ou
<FilesMatch "\.(htm|html|css|js)$">
ForceType 'text/html; charset=UTF-8' #RECOMENDO
</FilesMatch>
ou
<FilesMatch "\.(htm|html|css|js)$">
AddDefaultCharset UTF-8
</FilesMatch>


OBS: IDE e DB precisão ser setados para que funcionem sem problemas...

Abraço,

Hilton

Adriano 'Stanley'

unread,
Jun 17, 2010, 6:51:16 PM6/17/10
to jque...@googlegroups.com
Galera, agradeço pelas ajudas mas começo a achar que não existe solução para esse problema. Não sei como os sites grandes fazem, mas isto está me dando uma dor de cabeça danada.

Já coloquei em minha página:

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />

Estou com o Firefox e com o IE aqui. Minha página tem uma rotina em ajax que envia: "áéíóú".

Estou debugando aqui e em meu Servlet eu recebo:

"áéíóú" quando faço a requisição pelo Firefox;
5 símbolos estranhos quando a requisição é pelo IE;

Criei uma gambiarra aqui (estou aceitando qualquer tipo de gambiarra! quanto mais cabeluda, melhor!):

Detalhe: isto está em um Servlet...

ByteBuffer b = ByteBuffer.wrap(pt.getBytes());
Charset c = Charset.forName("UTF-8");
CharBuffer teste = c.decode(b);
String palavra = new String(teste.array());

Resolve o problema quando a requisição é pelo IE!
Mas aí embola tudo quando a requisição é pelo Firefox!!!!!!

Ou é um ou outro? Tá difícil..

Adriano Castro
http://www.enigmapremiado.com.br

Adriano 'Stanley'

unread,
Jun 17, 2010, 6:54:20 PM6/17/10
to jque...@googlegroups.com
Aparentemente resolvou com isso:

request.setCharacterEncoding("UTF-8");

Mas devo publicar mais uma versão nesse fim de semana aí veremos se funcionou lá no servidor também.

Adriano Castro
http://www.enigmapremiado.com.br


2010/6/17 Adriano 'Stanley' <adriano...@gmail.com>

Ruan Carlos

unread,
Jun 17, 2010, 10:50:33 PM6/17/10
to jque...@googlegroups.com
Solução é fácil, só trabalhar tudo com UTF-8 =D. Mas vc já está errado, está trabalhando com java rsrsrs.

-----------------------------------------------------------------
Ruan Carlos
@ruanltbg
www.ruancarlos.com.br
Desenvolvedor web


--

Adriano 'Stanley'

unread,
Jun 18, 2010, 9:05:57 AM6/18/10
to jque...@googlegroups.com
Hahahahaha! Boa!

Adriano Castro
http://www.enigmapremiado.com.br
Reply all
Reply to author
Forward
0 new messages