Pergunta

Suponha que meu aplicativo web renderize a seguinte tag:

<object type="application/x-pdf" data="http://example.com/test%2Ctest.pdf">
     <param name="showTableOfContents" value="true" />
     <param name="hideThumbnails" value="false" />
</object>

Deve data atributo pode ser escapado (caminho codificado por porcentagem) ou não?No meu exemplo é.Não encontrei nenhuma especificação.

termo aditivo

Na verdade, estou interessado em especificar o que os plug-ins do navegador devem consumir data atributo esperamos ver lá.Por exemplo, o plugin Adobe Acrobat usa uri com e sem escape.No entanto, QWebPluginFactory guloseimas data atributo como um URI legível por humanos (sem escape), e isso leva a uma codificação percentual dupla.E estou me perguntando se é um bug de QWebPluginFactory ou não.

Foi útil?

Solução

O data atributo espera que o valor seja um URI.Portanto, você deve fornecer um valor que seja um URI sintaticamente válido.

A especificação atual de URIs é RFC 3986.Para ver se o , no caminho do URI precisa ser codificado, veja como o caminho regra de produção é definida:

path          = path-abempty    ; begins with "/" or is empty
              / path-absolute   ; begins with "/" but not "//"
              / path-noscheme   ; begins with a non-colon segment
              / path-rootless   ; begins with a segment
              / path-empty      ; zero characters

Como temos um URI com autoridade informações, precisamos dar uma olhada caminho vazio (ver URI regra de produção):

path-abempty  = *( "/" segment )

segmento é zero ou mais pchar caracteres que são definidos da seguinte forma (já ampliei as regras de produção):

pchar         = ALPHA / DIGIT / "-" / "." / "_" / "~" / "%" HEXDIG HEXDIG / "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" / ":" / "@"

E como você pode ver, pchar expande para um literal ,.Então você não precisa codificar o , no caminho componente.Mas como você tem permissão para codificar qualquer caractere não delimitador usando a codificação percentual sem alterar seu significado, não há problema em usar %2C em vez de ,.

Outras dicas

Os URLs geralmente só podem conter caracteres específicos.Infelizmente, especificações diferentes contêm listas diferentes de caracteres que são considerados reservados e, portanto, não podem ser usados.

No seu exemplo, o caractere codificado é uma vírgula (,), que é um caractere reservado em algumas especificações, portanto não é errado codificá-lo.

A maioria dos servidores web deve lidar igualmente com vírgulas não codificadas e codificadas, no entanto, pode haver alguns que não o façam, dependendo de sua configuração.Devido a isso, geralmente é uma boa ideia evitar caracteres especiais em nomes de arquivos (como no seu exemplo).

A codificação de URL é sempre necessária quando você possui caracteres especiais em parâmetros GET.Por exemplo, um parâmetro GET que é compatível com C&A como um valor deve ser escrito como:

http://example.com/somescript.php?value=C%26A

EDITAR:

Os plug-ins (ou mesmo o navegador) não se importam de qualquer maneira.Eles não tentam (ou precisam) decodificá-lo ou algo parecido.Eles apenas solicitam o URL inserido no servidor.

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