Pergunta

Eu estou trabalhando em um site que o cliente tinha em croata e esloveno. De acordo com os nossos padrões de URL existentes que têm gerado regras de escrita re URL que imitam o layout da aplicação que tem levado a ter muitos charachters não ASCII nos URLs.

Exemplos š ¿C

Algumas ligações são acionados a partir do Flash usando getURL, alguns são links HTML padrão. Alguns são Response.Redirects programatic e alguns através de adição de 301 códigos de estado e de localização para os cabeçalhos da resposta. Estou testando no IE6, IE7 e Firefox 3 e internitmtently, os navegadores exibir os caracteres não-latinos URL codificado.

š = %c5%a1
ž = %c5%be
č = %c4%8d

Eu estou supondo que isso é algo a ver com o IIS ea forma como ele lida com Response.Redirect e AddHeader ( "Location ...

Alguém sabe de uma maneira de forçar o IIS para não URL codificar esses caracteres ou é a minha melhor aposta para substituir estes com caracteres não-diacrítico?

Graças

Foi útil?

Solução

Pergunte-se se você realmente quer que eles não url codificado. O que acontece quando um usuário que não tem suporte para esses caracteres instalados vem por aí? Eu não tenho idéia, mas eu não gostaria de arriscar fazer grandes partes do meu site não está disponível para uma grande parte dos computadores do mundo ...

Em vez disso, se concentrar em por você precisa deste recurso. É para fazer o bom urls olhar? Se assim for, usando um z regular em vez de ¼ vai fazer muito bem. Você usa as URLs para a entrada do usuário? Se assim for, url-codificar tudo antes de analisá-lo para a saída link, e url decodificação-lo antes de usar a entrada. Mas não use Z e outras cartas locais em urls ...

Como uma nota lateral, na Suécia temos um, A e O, mas ninguém nunca usa-los em urls - usamos um, um e o, porque os navegadores não vai apoiar as urls contrário. Isso não surpreender os usuários, e muito poucos são incapazes de compreender o que as palavras que estamos visando apenas porque o anel em uma falta na url. O texto ainda mostrará corretamente na página, certo? ;)

Outras dicas

Alguém sabe de uma maneira de forçar o IIS para não URL encode

Você deve url-codificação. Passando um ‘S’ raw (\ XC5 \ xA1) em um cabeçalho HTTP é inválido. Um navegador pode corrigir o erro até ‘% C5% A1’ para você, mas se assim o resultado não será diferente para se você tivesse acabado de escrever ‘% C5% A1’ em primeiro lugar.

A inclusão de um ‘S’ cru em um link não é errado, como tal, o navegador deve codificá-lo para UTF-8 e URL-codificar de acordo com a especificação IRI. Mas para garantir que isso realmente funciona você deve garantir que a página com o link é servido como UTF-8 codificado. Mais uma vez, URL-codificação manual é provavelmente mais seguro.

Eu tive nenhum problema com URLs UTF-8, você pode conectar-se a um exemplo que não está funcionando?

você tem um link para uma referência onde se detalha o que compreende um válido cabeçalho HTTP?

Canonicamente, RFC 2616 . No entanto, na prática, é um tanto inútil. A passagem crítica é:

Palavras de * texto pode conter caracteres de conjuntos de caracteres diferentes de ISO-8859-1 apenas quando codificados de acordo com as regras da RFC 2047.

O problema é que, de acordo com as regras de RFC 2047, apenas átomos de ‘’ pode acomodar uma 2047 ‘palavra-codificado’. TEXT, na maioria das situações é incluído em HTTP, não pode ser planejado para ser um átomo. Enfim RFC 2047 é explicitamente concebido para RFC formatos 822-família e, apesar de HTTP se parece muito com um formato 822, não é, na realidade compatível; ele tem sua própria gramática básica com diferenças sutis, mas significativas. A referência a RFC 2047 no HTTP especificação não dá nenhuma pista de como se poderia ser capaz de interpretá-lo de qualquer maneira consistente e é, tanto quanto alguém que eu conheço pode trabalhar fora, um erro.

Em qualquer caso, as tentativas de navegadores reais para encontrar uma maneira de interpretar RFC 2047 codificação em qualquer lugar em seu HTTP manipulação. E enquanto bytes não-ASCII são definidos pela RFC 2616 para a ISO-8859-1, em navegadores de realidade pode usar uma série de outras codificações (como UTF-8, ou qualquer que seja a codificação padrão do sistema é) em vários lugares ao manusear HTTP cabeçalhos. Portanto, não é seguro confiar mesmo no set 8859-1 personagem! Não que isso teria lhe dado ‘S’ de qualquer maneira ...

Os caracteres devem ser válidos em uma URL. Eu fiz as coisas URL SEO em um grande site de viagens e é aí que eu aprendi isso. Quando você força diacríticos para ascii você pode mudar o significado das palavras, se você não tiver cuidado. Há muitas vezes há tradução como diacríticos só existem em seu contexto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top