Nome:
Local: Rio de Janeiro, RJ, Brazil

Que perguntinha hein?! Mas vamos lá, adoro estudar assuntos relacionados à web, sempre que posso aprendo uma tecnologia, técnica ou linguagem nova. Tento sempre ver quais são as tendências e acompanha-las, enfim eu sou um eterno aprendiz. Deixando o lado profissional, entrando no lado pessoal, sou uma pessoa super gente-boa (pelo menos eu me acho. rs), adoro curtir a night, sair com os amigos, fazer novas amizades e viajar (tem coisa melhor do que isso?) Acho que você já está sabendo demais sobre mim. Fuiii...

quinta-feira, 24 de maio de 2007

Acentuação no Ajax

Sabemos (ou pelo menos deveríamos saber) que o grande Boom do segundo semestre de 2006, foi Ajax todos os blogs possíveis e imagináveis abordavam o tema, era muita empolgação, todos os sites tinham que ter Ajax, em pouco tempo perguntavamos como poderíamos existir sem o tal Ajax ;), até que no final do ano com o intensivo uso de Ajax, vimos que não é as mil maravilhas. Percebemos que Ajax não é perfeito, como todas as coisas, e começaram a ter movimentos com grandes críticas ao Ajax, eu simpatizo com ele, mas como tudo na vida, na medida certa. Enfim, não estou aqui pra julgar o pobre coitado e se você quer ler mais sobre isso, na internet tem um monte de blogs que abordam o tema e no meu blogroll, que ainda vou fazer, também tem alguns que abordam. Como sempre, ou na maioria das vezes, vim apenas trazer o código.
Só fiz essa introdução, pois não tinha falado sobre isso e como todo bom anfitrião tenho que fazer as honras.

Cenário:
Nesse novo emprego, estamos implementando uma parte do site que utiliza ajax, para pesquisa em banco e como era de se imaginar esbarrei no problema de acentuação, e eu logo foi ao senhor-que-tudo-sabe (leia-se: Google), afim de uma resposta e a que mais achei foi de mudar o header da página server-side (no meu caso, php) e client-side (javascript e o HTML), para ISO-8859-1 (creio que a numeração seja essa) e vi um post muito bom lá no Elmicox (se você não conhece esse blog, não sabe o que está perdendo, ele saca muito só não passei o permalink, pois eu não salvei-o) logo fui testar, e para minha surpresa não deu certo, continuei a minha busca e nada encontrei, até que nós mesmos resolvemos a questão de uma maneira muito simples e de uma forma alternativa que achei muito legal e como disse simplérrima (isso ficou meio gay), a solucão baseia-se em substituir os caracteres acentuados, por aqueles códigos de acentuação do html e depois retornar essa troca para o javascript e os valores o html interpretar automaticamente a acentuação, vamos ao que interessa:
.
no PHP:

function html_scape($strIn) {
$arr_procura = array ('á', 'à', 'ã', 'â', 'ä', 'õ', 'ò','ó', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'ï', 'ç', 'Á', 'À', 'Ã', 'Â', 'Ä', 'Õ','Ò', 'Ó', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Ï', 'Ç');
$arr_troca = array ('á','à', 'ã', 'â', 'ä', 'õ', ' ò', 'ô', 'è', 'é', ' ê', 'ë', 'ì', 'í', 'ï','ç', 'Á','À', 'Ã', 'Â', 'Ä', 'Õ', 'Ò', 'Ô', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Ï','Ç');
return str_replace($arr_procura, $arr_troca, $strIn);
}


Pega-se por parâmetro a string que contém os caracteres que irão ser trocados. (Utilizei o retorno do sql, para o javascript).
A array $arr_procura, recebe os caracteres que vão ser procurados ( no nosso caso os acentuados).
A array $arr_troca, recebe os caracteres que vão ser trocados (no nosso caso aquele código html).
Após manda-se retornar a troca dos caracteres através da função str_replace.

Obs: Poderíamos utilizar um array bidimensional para fazer a troca, pois um array complementa o outro, mas para fins de melhor entendimento fiz duas arrays.
Como disse anteriormente, os arrays se complementam,logo você tem que manter a ordem do posicionamento dos caracteres que vão ser trocados.

Obs2: No meu caso os caracteres especias, são apenas, os acentuados, então o meu array ficou dessa forma, mas você pode alterar esse array da forma que for necessário pra ti, respeitando , é claro, o posicionamento nos dois arrays.

Update:
No outro blog o micox, fez uma observação muito interessante, no php tem uma função nativa que converte automaticamente os caracteres para o código html, dessa forma é bem mais simples de resolver o problema, a função é html_entities($string).

Comentem, please...

fuiii...

Marcadores: , ,

0 Comentários:

Postar um comentário

Assinar Postar comentários [Atom]

<< Página inicial