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 bar
un campo de texto, crearfoo+bar
en la URL).file_get_contents
Respuestas:
Para la consulta de URI use
urlencode
/urldecode
; para cualquier otra cosa userawurlencode
/rawurldecode
.La diferencia entre
urlencode
yrawurlencode
es queurlencode
codifica de acuerdo con application / x-www-form-urlencoded (el espacio está codificado con+
) mientrasrawurlencode
codifica 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 siemprerawurldecode
para 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$_POST
y$_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
mailto
enlace que les permite hacerlo.Código PHP
Nota: lo anterior asume que está enviando a un
text/html
documento. Si su tipo de medio de salida estext/json
simplemente 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
$token
arriba.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