sexta-feira, 16 de julho de 2010

Twitter - Link para Twittar com acentos...

Bom dia, achei um bug muito engraçado no twitter hoje...
Estava tentando responder a uma pergunta no orkut questionando porque o link dele não estava funcionando...
Pesquisei e não encontrei a resposta, resolvi tentar a solução idiota, pois achei uns links que funcionavam com acentos e outros que não...
Percebi que a diferença entre eles era o www.
Sim o www...

$tweet = "Frase com acento é foda!!! Mas é muito legal a programação... ä";
$tweet =  ($tweet);
$tweet = utf8_encode($tweet);
$tweet = urlencode($tweet);
header("Location: http://twitter.com/?status=".$tweet); //Funciona
header("Location: http://www.twitter.com/?status=".$tweet); //Não funciona
 E lembre-se de codificar em UTF-8 antes de enviar...
Não sei exatamente a causa do bug... Creio que alguma configuração que desconheço no servidor do twitter...
O problema é que no servidor com www. os acentos ficam urlencodados the way they are "s%E7%E3o", já no sem www. ele decodifica para "são"...
Bug esquisito, espero que ajude quem estiver com esse problema com palavras acentuadas em seus links...
Detalhe, o problema também afeta hyperlinks (aquele <a href="http://www.twitter.com/?status=">...
Então preste atenção a este detalhe...
Isso claramente não afeta apenas o PHP, mas qualquer linguagem... Pois os links gerados não funcionam nos browsers também...
Segue links para você testar por você mesmo (os links não funcionam pra quem não esta logado):
Tenha medo, muito medo, :P

Update: Entendi o bug... Ao acessar a url com www ele redireciona para a url sem o www, e neste redirect ele acaba sujando a mensagem...
Coisa de programador idiota que faz urlencode(urlencode($text))...

4 comentários:

Unknown disse...

Boa cara, já estava a quinzze min tentando descobrir o que eu estava fazendo de errado xD

Leofeitosa disse...

Se você converter a url usando o utf8_encode do php resolve!

Otavio Y. A. Diniz disse...

Esse problema era antigo, devem ter resolvido...

Otavio Y. A. Diniz disse...

Alia, o utf8_decode não resolve se você pensar que o sistema deve aceitar todos os caracteres existentes na codificação do UTF-8...