Encontrei o seguinte URL hoje:
http://www.sfgate.com/cgi-bin/blogs/inmarin/detail??blogid=122&entry_id=64497
Observe o ponto de interrogação duplo no início da string de consulta:
??blogid=122&entry_id=64497
Meu navegador não parecia ter nenhum problema com ele e executando um bookmarklet rápido:
javascript:alert(document.location.search);
acabou de me fornecer a string de consulta mostrada acima.
Este é um URL válido? Estou sendo tão pedante (supondo que seja) porque preciso analisar URLs como essa para obter parâmetros de consulta, e o suporte a pontos de interrogação duplicados exigiria algumas alterações em meu código. Obviamente, se eles estiverem na selva, terei de apoiá-los; Estou curioso principalmente para saber se é minha culpa por não aderir aos padrões de URL exatamente, ou se é de fato um URL não padrão.
url
parsing
query-parameters
Estragar
fonte
fonte
indexOf()
para localizar o ponto de interrogação, então ele pegou a posição da primeira ocorrência. Em seguida, estou dividindo os query_parameters em cada um&
e, em seguida, seus pares nome / valor em cada um=
.Respostas:
Sim, é válido. Apenas o primeiro
?
em um URL tem significado, depois de tratado como ponto de interrogação literal:...
http://tools.ietf.org/html/rfc3986#section-3.4
fonte
?blogid
. Na verdade, parece ser um parâmetro não essencial, ou seja, a página é exibida da mesma forma, com qualquer número de pontos de interrogação lá, ou omitindo o parâmetro totalmente.Como uma resposta tangencialmente relacionada,
foo?spam=1?&eggs=3
dá ao parâmetrospam
o valor1?
fonte
.htaccess
truques ou truques semelhantes. se mudarmosfoo
parascript.php
e fizermos essa solicitaçãoscript.php?spam=1?&eggs=3
,var_dump($_GET)
mostraráarray(2) { ["spam"]=> string(2) "1?" ["eggs"]=> string(1) "3" }