php - unescape - urlencode online
¿Cómo codificar URL correctamente una cadena en PHP? (3)
Aquí está mi caso de uso, que requiere una cantidad excepcional de codificación. Tal vez piensas que fue artificial, pero ejecutamos esto en producción. Coincidentemente, esto cubre todo tipo de codificación, por lo que estoy publicando como un tutorial.
Usar la descripción del caso
Alguien acaba de comprar una tarjeta de regalo prepaga ("token") en nuestro sitio web. Los tokens tienen las URL correspondientes para canjearlos. Este cliente quiere enviarlo por correo electrónico a otra persona. Nuestra página web incluye un enlace de mailto
que les permite hacer eso.
Código PHP
// The order system generates some opaque token
$token = ''w%a&!e#"^2(^@azW'';
// Here is a URL to redeem that token
$redeemUrl = ''https://httpbin.org/get?token='' . urlencode($token);
// Actual contents we want for the email
$subject = ''I just bought this for you'';
$body = ''I just bought a widget for you. Please enter your shipping details here: '' . $redeemUrl;
// A URI for the email as prescribed
$mailToUri = ''mailto:?subject='' . rawurlencode($subject) . ''&body='' . rawurlencode($body);
// Print an HTML element that links to that page
echo ''<a href="'' . htmlspecialchars($mailToUri) . ''">Email your friend</a>'';
Nota: lo anterior supone que está generando un documento de text/html
. Si su tipo de medio de salida es text/json
, simplemente use $retval[''url''] = $mailToUri;
porque la codificación de salida es manejada por json_encode()
.
Caso de prueba
- Ejecute el código en un sitio de prueba PHP ( ¿hay uno canónico que debería mencionar aquí? )
- Haga clic en el enlace
- Envía el correo
- Recibe el correo electrónico
- Haga clic en ese enlace
Debería ver:
"args": {
"token": "w%a&!e#/"^2(^@azW"
},
Y, por supuesto, esta es la representación JSON de $token
anterior.
Estoy haciendo una página de búsqueda, donde search.php?query=your query
una consulta de búsqueda y el formulario se envía a search.php?query=your query
. ¿Qué función de PHP es la mejor y que debo usar para codificar / decodificar la consulta de búsqueda?
El urlencode() y urldecode() .
Sin embargo, no debería necesitar usar urldecode()
en las variables que aparecen en $_POST
y $_GET
.
Para la consulta de URI use urlencode
/ urldecode
; para cualquier otra cosa use rawurlencode
/ rawurldecode
.
La diferencia entre urlencode
y rawurlencode
es que
-
urlencode
codifica según la application/x-www-form-urlencoded (el espacio está codificado con+
) mientras -
rawurlencode
codifica de acuerdo con el Percent-Encoding simple (el espacio está codificado con%20
).