Como servir nomes de arquivos HTTP com caracteres especiais?

1

Considere a seguinte página do blog como um caso:

link

! Cuidado, tem toneladas de youtubes embutidos, então é uma carga lenta! É uma página brasileira, escrita em português, mas hospedada (segundo o dono do blog) em um webhost dos EUA.

De interesse são os links "pronúncia", onde eles se ligam a nomes de arquivos contendo caracteres não ascii. Veja o segundo (para o Pará): o link que eu escrevo é para www.roney.com.br/wp-content/uploads/2010/06/par%E1.mp3 (a menos que ele mude de dentro de mim o futuro:)!))

Como você pode ver, ele o codificou, mas o que você não sabe é o que ele nomeou em seu sistema de arquivos ou a configuração do sistema que ele possui.

Se eu clicar nele no meu navegador Firefox, eu recebo a página 404. Ele afirma que esses links estão trabalhando para visitantes brasileiros. Eu pensei que isso era uma coisa de servidor de 100%, ou seja, o servidor servirá ou não. Apenas por risos eu defini o idioma preferido para o Português no meu Firefox, mas como eu suspeitava, não fazia nenhuma diferença.

Qualquer um se preocupa em oferecer informações sobre como isso pode funcionar no Brasil, mas não nos EUA, ou quais coisas eu alteraria em minha própria estação de trabalho para que elas sirvam também para mim.

    
por user40704 23.06.2010 / 01:33

1 resposta

1

O problema está na codificação do URI. Aqui ele é codificado como iso-8859-1 (latin-1) (e, em seguida, codificado por porcentagem), mas RFC 3986 afirma que ele deve ser codificado como UTF-8 (e, em seguida, codificado por porcentagem).

Fonte:

Mais informações sobre percentual de codificação na wikipedia .

A verdadeira RFC 3986 .

Solução:

Para ter uma ideia de como resolver isso, você pode fazer algo assim em PHP.

<?php
echo urlencode(utf8_encode(urldecode('par%E1.mp3')));
?>

Note que se você colocar o URI inteiro, barras (/) também serão codificadas, invalidando o URI.

    
por 23.06.2010 / 01:54