Estoy creando una página de búsqueda, donde se escribe una consulta de búsqueda y se envía el formulario search.php?query=your query. ¿Qué función de PHP es la mejor y que debería usar para codificar / decodificar la consulta de búsqueda?
97

foo barun campo de texto, crearfoo+baren la URL).file_get_contentsRespuestas:
Para la consulta de URI use
urlencode/urldecode; para cualquier otra cosa userawurlencode/rawurldecode.La diferencia entre
urlencodeyrawurlencodees queurlencodecodifica de acuerdo con application / x-www-form-urlencoded (el espacio está codificado con+) mientrasrawurlencodecodifica según la codificación porcentual simple (el espacio se codifica con%20).fuente
+lugar de%20. Y además de eso, application / x-www-form-urlencoded se usa para codificar datos de formularios, mientras que la codificación porcentual tiene un uso más general.urldecode. Entonces, ¿qué pasa con la ruta URI (por ejemplo/a/path with spaces/) y el fragmento URI (por ejemplo#fragment). ¿Debería usar siemprerawurldecodepara estos dos?rawurlencode; pero para los campos POST y GET, vaya conurlencode(Like /? folder = my + folder) `El urlencode () y urldecode () con nombres ingeniosos .
Sin embargo, no debería necesitar usar
urldecode()en variables que aparecen en$_POSTy$_GET.fuente
"name=b&age=c&location=d") enviados a un archivo PHP a través de AJAX?Este es mi caso de uso, que requiere una cantidad excepcional de codificación. Tal vez pienses que fue un truco, pero lo ejecutamos en producción. Coincidentemente, esto cubre todo tipo de codificación, así que lo publico como tutorial.
Descripción del caso de uso
Alguien acaba de comprar una tarjeta de regalo prepaga ("token") en nuestro sitio web. Los tokens tienen las URL correspondientes para canjearlos. Este cliente desea enviar la URL por correo electrónico a otra persona. Nuestra página web incluye un
mailtoenlace que les permite hacerlo.Código PHP
Nota: lo anterior asume que está enviando a un
text/htmldocumento. Si su tipo de medio de salida estext/jsonsimplemente utilícelo$retval['url'] = $mailToUri;porque la codificación de salida es manejada porjson_encode().Caso de prueba
Deberías ver:
Y, por supuesto, esta es la representación JSON de
$tokenarriba.fuente
mailto:no es HTTP), puede usar$mailToUri 'mailto:?' . http_build_query(['subject'=>$subject, 'body'=>$body], null, '&', PHP_QUERY_RFC3986);.Puede utilizar las funciones de codificación de URL PHP tiene la
función
ASP tiene el
función
En JavaScript puede utilizar el
función.
fuente
Según el tipo de codificación estándar RFC que desee realizar o si necesita personalizar su codificación, es posible que desee crear su propia clase.
Ejemplo de uso:
Saldrá:
* Obtenga más información sobre los estándares RFC: https://datatracker.ietf.org/doc/rfc3986/ y urlencode vs rawurlencode?
fuente