Estoy haciendo una página de búsqueda, donde tipea una consulta de búsqueda y el formulario se envía al 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?¿Cómo codificar URL correctamente una cadena en PHP?
Respuesta
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 de acuerdo con application/x-www-form-urlencoded (espacio está codificado con+
) mientrasrawurlencode
codifica de acuerdo con la llanura Percent-Encoding (espacio está codificado con%20
).
* application/x-www-form-urlencoded * es solo una variante especial del * Porcentaje de codificación * y solo se aplica para codificar datos de formularios HTML. – Gumbo
¿Qué codificación es mejor, form-urlencoded o porcentaje? –
@Click Upvote: No se pueden comparar de esa manera. El formato * application/x-www-form-urlencoded * es * el * formato * de codificación porcentual, excepto que el espacio está codificado con '+' en lugar de '% 20'. Y además de eso, * application/x-www-form-urlencoded * se utiliza para codificar datos de formulario mientras que * Percent-Encoding * tiene un uso más general. – Gumbo
La astutamente llamada urlencode() y urldecode().
Sin embargo, no debería necesitar usar urldecode()
en las variables que aparecen en $_POST
y $_GET
.
El código malicioso' rawurlencode' y 'rawurldecode' ... –
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.
Caso de uso Descripción
Alguien acaba de comprar una tarjeta de prepago de regalo ("token") en nuestra página 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 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á dando salida a un documento text/html
. Si su tipo de medio de salida es text/json
, simplemente use $retval['url'] = $mailToUri;
ya que la codificación de salida se maneja mediante json_encode()
.
caso de prueba
- Ejecutar el código en un sitio de prueba PHP (es que hay una canónica Debo mencionar aquí?)
- Haga clic en el enlace
- Envía el correo
- Obtenga el correo electrónico
- Haga clic en ese enlace
que debes ver:
"args": {
"token": "w%a&!e#\"^2(^@azW"
},
Y por supuesto esto es la representación JSON de $token
anteriormente.
- 1. ¿Cómo codificar correctamente los acentos de URL?
- 2. ¿Cómo codificar una cadena URL completa en ASP MVC
- 3. ¿Cómo puedo URL codificar una cadena en Excel VBA?
- 4. Cómo codificar uri una cadena en jsp?
- 5. ¿Cómo codificar la siguiente URL utilizando JavaScript o jQuery correctamente?
- 6. Encriptar/Codificar una ID en la cadena de URL
- 7. Cómo codificar una URL en WinForms?
- 8. ¿Se puede codificar la barra invertida correctamente en URL con reescritura de URL?
- 9. Cómo codificar URL en Groovy?
- 10. Java - codificar URL
- 11. Cómo codificar una cadena con Base64 en Android?
- 12. cómo codificar URL usando PHP como los navegadores hacer
- 13. Cómo codificar URL contiene caracteres Unicode con PHP
- 14. cómo codificar en url en android?
- 15. PHP json_encode codificar una función
- 16. Url Codificar Javascript objeto literal
- 17. URL Codificar todo no alfanumérico en C#
- 18. ¿Cómo puedo codificar una cadena para HTML?
- 19. Cómo codificar períodos para URL en Javascript?
- 20. Cómo codificar (.) Punto en url Rails
- 21. Buscar url de una cadena con php
- 22. PHP - Agregar enlace a una URL en una cadena
- 23. codificar una cadena de consulta en I
- 24. ¿Cómo codificar los parámetros de URL?
- 25. Cómo codificar una cadena que representa la ruta URL con JSTL?
- 26. ¿Cómo puedo codificar XML una cadena en Erlang?
- 27. PHP: ¿Es posible SUBSTRAR correctamente una cadena UTF-8?
- 28. ¿Por qué necesita codificar URL?
- 29. Cómo codificar url en javascript y descodificarlo en C#
- 30. ¿Quién es responsable de codificar una cadena?
¿Tiene algún problema? Los navegadores y PHP deberían manejar esto automáticamente (por ejemplo, poniendo 'foo bar' en un campo de texto, crea' foo + bar' en la URL). –
@Felix Llamaré al script del buscador usando 'file_get_contents' –