quarta-feira, dezembro 01, 2004


keywords: wap, wml, charset, encoding, utf-8, iso-8859-1, text input.


<?php

header("Content-type: text/vnd.wap.wml");

print "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
print "<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n";

print "<wml>\n";
print "   <card title=\"Entrada de texto\">\n";
print "      <p>\n";
print "         Escreva seu texto aqui! <br/>\n";
print "         <input name=\"texto\" size=\"17\" type=\"text\" maxlength=\"830\" /><br/>\n";
print "         <anchor>Enviar<go href=\"submit_texto.pwml\" method=\"post\">\n";
print "             <postfield name=\"texto\" value=\"$(texto)\" />\n";
print "             </go>\n";
print "         </anchor>\n";
print "      </p>\n";
print "   </card>\n";
print " </wml>\n";

?>


------
Qual o segredo do arquivo acima?!
Nao encontrei em site algum na internet a solucao para o problema q eu estava tendo, e apos descobrir a solucao, resolvi coloca-la aqui. O arquivo acima eh um arquivo em PHP q gera um arquivo WML(wap) onde existe uma caixa de entrada de texto e o conteudo dela eh passado por POST para o arquivo "submit_texto.pwml"..
Muitas pessoas adoram usar o recurso de previsibilidade de texto em seus celulares e a previsibilidade acaba inserindo os acentos corretamente nas palavras (obvio!). O problema eh q a os celulares utilizam o encoding UTF-8 nas suas fontes enquanto a maioria dos sites utiliza ISO-8859-1.
Para q exista uma interoperabilidade perfeita entre o servidor wap e o celular, os arquivos wml devem conter no cabecalho a definicao da versao do XML juntamente com a especificacao do encoding UTF-8.
------

<?php

header("Content-type: text/vnd.wap.wml");

print "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
print "<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n";

$texto = utf8_decode($texto);
//agora voce jah pode trabalhar com o texto..
$tam_texto = strlen($texto);

//e na hora de retorna-lo para o celular
//eh necessario codifica-lo novamente
print "<wml>\n";
print "   <card title=\"Mostra o texto\">\n";
print "      <p>\n";
print "          Texto inserido: <br/>\n";
print "          " . utf8_encode($texto) . "<br/>\n";
print "      </p>\n";
print "   </card>\n";
print "</wml>\n";

?>


------
Neste outro arquivo acima, o conteudo da variavel eh pego e decodificado para poder-se trabalhar em cima dele utilizando o PHP.
Se o programador quiser mostrar o conteudo novamente na tela do celular, este deverah ser codificado novamente para UTF-8.

Verifiquei diversos sites wap e, dentre eles, sites grandes como Terra, e UOL ignoram o problema..
Verifiquei nos foruns de desenvolvedores da Nokia e nao existe nenhuma resposta precisa sobre o assunto..

1 Comments:

Anonymous Anônimo said...

esse lance de encodings e' chato. Latin1, western, kanji, etc... ad infinitum... UTF-8 seria uma otima solucao se nao tivesse ignorado, no inicio, o significado generalizado desse tal latim. data venia! PLZDA.

7:17 PM  

Postar um comentário

<< Home