Usando Javascript, quiero generar un enlace a una página. Los parámetros de la página están en una matriz de Javascript que serializo en JSON.
Entonces me gustaría generar una URL como esa:
http://example.com/?data="MY_JSON_ARRAY_HERE"
¿Cómo necesito escapar de mi cadena JSON (matriz serializada) para incluirla como parámetro en una URL?
Si hay una solución usando JQuery, me encantaría.
Nota: Sí, los parámetros de la página deben estar en una matriz porque hay muchos de ellos. Creo que usaré bit.ly para acortar los enlaces después.
Respuestas:
fuente
{["
). ¿Hay alguna forma de codificar solo los caracteres necesarios para poder acortar mis URL?Puede usar la
encodeURIComponent
codificación segura de URL de partes de una cadena de consulta:o si está enviando esto como una solicitud AJAX:
fuente
Estaba buscando hacer lo mismo. El problema para mí fue que mi URL se estaba haciendo demasiado larga. Encontré una solución hoy usando la biblioteca jsUrl.js de Bruno Jouhier .
No lo he probado muy a fondo todavía. Sin embargo, aquí hay un ejemplo que muestra las longitudes de caracteres de la salida de la cadena después de codificar el mismo objeto grande usando 3 métodos diferentes:
jQuery.param
JSON.stringify + encodeURIComponent
JSURL.stringify
claramente JSURL tiene el formato más optimizado para codificar url un objeto js.
el hilo en https://groups.google.com/forum/?fromgroups=#!topic/nodejs/ivdZuGCF86Q muestra puntos de referencia para la codificación y el análisis.
Nota : Después de la prueba, parece que la biblioteca jsurl.js utiliza funciones ECMAScript 5 como Object.keys, Array.map y Array.filter. Por lo tanto, solo funcionará en navegadores modernos (no, es decir, 8 y menores). Sin embargo, hay polyfills para estas funciones que lo harían compatible con más navegadores.
fuente
Utilizando
encodeURIComponent()
:fuente
Ofreceré una alternativa extraña. A veces es más fácil usar una codificación diferente, especialmente si se trata de una variedad de sistemas que no manejan todos los detalles de la codificación URL de la misma manera. Este no es el enfoque más convencional, pero puede ser útil en ciertas situaciones.
En lugar de codificar con URL los datos, puede codificarlos en base64. El beneficio de esto es que los datos codificados son muy genéricos y consisten solo en caracteres alfabéticos y, a veces, en los finales
=
. Ejemplo:Conjunto de cadenas JSON:
Esos datos, codificados en URL como el
data
parámetro:Lo mismo, codificado en base64:
El enfoque base64 puede ser un poco más corto, pero lo más importante es que es más simple. A menudo tengo problemas para mover datos codificados con URL entre cURL, navegadores web y otros clientes, generalmente debido a comillas,
%
signos incrustados, etc. Base64 es muy neutral porque no usa caracteres especiales.fuente
/
con$
,_
o de cualquier otro carácter que no requiere codificación URL por RFC 3986.La respuesta dada por Delan es perfecta. Simplemente agregue a él, en caso de que alguien quiera nombrar los parámetros o pasar múltiples cadenas JSON por separado, ¡el siguiente código podría ayudar!
JQuery
PHP
¡Espero que esto ayude!
fuente