Estou fazendo uma página de pesquisa, onde você digita uma consulta de pesquisa e o formulário é enviado search.php?query=your query
. Qual função PHP é a melhor e que devo usar para codificar / decodificar a consulta de pesquisa?
97
foo bar
um campo de texto, criarfoo+bar
na URL).file_get_contents
Respostas:
Para a consulta de URI, use
urlencode
/urldecode
; para qualquer outra coisa, userawurlencode
/rawurldecode
.A diferença entre
urlencode
erawurlencode
é queurlencode
codifica de acordo com application / x-www-form-urlencoded (o espaço é codificado com+
) enquantorawurlencode
codifica de acordo com o Percent-Encoding simples (o espaço é codificado com%20
).fonte
+
vez de%20
. Além disso, application / x-www-form-urlencoded é usado para codificar os dados do formulário, enquanto o Percent-Encoding tem um uso mais geral.urldecode
. Então, que tal o caminho URI (por exemplo/a/path with spaces/
) e o fragmento de URI (por exemplo#fragment
). Devo sempre usarrawurldecode
para esses dois?rawurlencode
; mas para os campos POST e GET vá comurlencode
(Like /? pasta = minha + pasta) `O urlencode () e o urldecode () com nomes astutos .
No entanto, você não deve precisar usar
urldecode()
em variáveis que aparecem em$_POST
e$_GET
.fonte
"name=b&age=c&location=d"
) enviados para um arquivo PHP via AJAX?Aqui está meu caso de uso, que requer uma quantidade excepcional de codificação. Talvez você pense que foi artificial, mas executamos isso na produção. Coincidentemente, isso cobre todo tipo de codificação, então estou postando como um tutorial.
Descrição do caso de uso
Alguém acabou de comprar um cartão-presente pré-pago ("token") em nosso site. Os tokens têm URLs correspondentes para resgatá-los. Este cliente deseja enviar o URL por e-mail para outra pessoa. Nossa página da web inclui um
mailto
link que permite que eles façam isso.Código PHP
Nota: o acima pressupõe que você está enviando para um
text/html
documento. Se o seu tipo de mídia de saída fortext/json
simplesmente usado$retval['url'] = $mailToUri;
porque a codificação de saída é controlada porjson_encode()
.Caso de teste
Você deveria ver:
E, claro, esta é a representação JSON
$token
acima.fonte
mailto:
não é HTTP), você pode usar$mailToUri 'mailto:?' . http_build_query(['subject'=>$subject, 'body'=>$body], null, '&', PHP_QUERY_RFC3986);
.Você pode usar funções de codificação de URL. PHP tem o
função
ASP tem o
função
Em JavaScript, você pode usar o
função.
fonte
Com base no tipo de codificação padrão RFC que você deseja executar ou se precisar personalizar sua codificação, você pode criar sua própria classe.
Use o exemplo:
Irá produzir:
* Saiba mais sobre os padrões RFC: https://datatracker.ietf.org/doc/rfc3986/ e urlencode vs rawurlencode?
fonte