Quando é codificado um espaço em um URL +
e quando é codificado %20
?
url
url-encoding
BC.
fonte
fonte
Respostas:
Da Wikipedia (ênfase e link adicionados):
Portanto, a porcentagem real de codificação usa
%20
enquanto os dados do formulário nos URLs estão em um formulário modificado que usa+
. Portanto, é mais provável que você veja apenas os+
URLs na string de consulta após um?
.fonte
multipart/form-data
usa codificação MIME;application/x-www-form-urlencoded
usa+
e usa URIs codificados corretamente%20
.http://www.bing.com/search?q=hello+world
e um recurso com espaço no nomehttp://camera.phor.net/cameralife/folders/2012/2012-06%20Pool%20party/
mailto:[email protected]?subject=I%20need%20help
,. Se você tentou isso com +, o email será aberto com + es em vez de espaços.Essa confusão ocorre porque os URLs ainda estão "quebrados" até hoje.
Isso se resume a:
Você deve ter
%20
antes?
e+
depois.Fonte
fonte
key1=value1&key1=value2
onde chaves e valores são codificados com as regras aencodeURIComponent
seguir, mas AFAIK o conteúdo da parte da consulta é totalmente 100% superior ao aplicativo. Caso contrário, ele só vai para o primeiro,#
não há codificação oficial.Eu recomendaria
%20
.Você está codificando-os?
Isso não é muito consistente entre os idiomas. Se não me engano, no PHP
urlencode()
trata os espaços como se o+
Python osurlencode()
tratasse como%20
.EDITAR:
Parece que estou enganado. O Python
urlencode()
(pelo menos no 2.7.2) usa emquote_plus()
vez dequote()
e, portanto, codifica os espaços como "+". Parece também que a recomendação do W3C é o "+" conforme aqui: http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1De fato, você pode acompanhar este interessante debate no rastreador de problemas do Python sobre o que usar para codificar espaços: http://bugs.python.org/issue13866 .
EDIT # 2:
Entendo que a maneira mais comum de codificar "" é como "+", mas apenas uma observação, pode ser apenas eu, mas acho isso um pouco confuso:
fonte
URLEncoder.encode()
método em Java também o converte+
.Um espaço só pode ser codificado para "+" nos pares de valor-chave do tipo de conteúdo "application / x-www-form-urlencoded" consulta parte de um URL. Na minha opinião, este é um maio, não uma obrigação. No restante dos URLs, ele é codificado como% 20.
Na minha opinião, é melhor sempre codificar espaços como% 20, não como "+", mesmo na parte da consulta de uma URL, porque é a especificação HTML (RFC-1866) que especifica que os caracteres de espaço devem ser codificados como " + pares de valor-chave de tipo de conteúdo de aplicativo "in" / x-www-form-urlencoded "(consulte o parágrafo 8.2.1, parágrafo 1.)
Essa maneira de codificar os dados do formulário também é fornecida em especificações HTML posteriores. Por exemplo, procure parágrafos relevantes sobre application / x-www-form-urlencoded na especificação HTML 4.01 e assim por diante.
Aqui está um exemplo de string no URL em que a especificação HTML permite a codificação de espaços como vantagens: " http://example.com/over/there?name=foo+bar ". Portanto, somente após "?", Os espaços podem ser substituídos por vantagens . Em outros casos, os espaços devem ser codificados para% 20. Mas como é difícil determinar corretamente o contexto, é a melhor prática nunca codificar espaços como "+".
Eu recomendaria codificar por cento todos os caracteres, exceto "não reservado", definido na RFC-3986, p.2.3
A implementação depende da linguagem de programação que você escolheu.
Se o seu URL contiver caracteres nacionais, primeiro codifique-os para UTF-8 e depois codifique por cento o resultado.
fonte