Usando Javascript, quero gerar um link para uma página. Os parâmetros para a página estão em uma matriz Javascript que eu serializo em JSON.
Então, eu gostaria de gerar um URL assim:
http://example.com/?data="MY_JSON_ARRAY_HERE"
Como preciso escapar da minha string JSON (matriz serializada) para incluí-la como parâmetro em um URL?
Se houver uma solução usando JQuery, eu adoraria.
Nota: Sim, os parâmetros para a página precisam estar em uma matriz, porque existem muitos deles. Acho que vou usar o bit.ly para encurtar os links depois.
Respostas:
fonte
{["
.) Existe uma maneira de codificar apenas os caracteres necessários, para que eu possa encurtar meus URLs?Você pode usar o
encodeURIComponent
URL para codificar com segurança partes de uma sequência de caracteres de consulta:ou se você estiver enviando isso como uma solicitação AJAX:
fonte
Eu estava olhando para fazer a mesma coisa. O problema para mim era que meu URL estava ficando muito longo. Encontrei uma solução hoje usando a biblioteca jsUrl.js de Bruno Jouhier .
Ainda não o testei completamente. No entanto, aqui está um exemplo que mostra os comprimentos de caracteres da saída da string depois de codificar o mesmo objeto grande usando 3 métodos diferentes:
jQuery.param
JSON.stringify + encodeURIComponent
JSURL.stringify
claramente JSURL tem o formato mais otimizado para urlEncoding um objeto js.
o segmento em https://groups.google.com/forum/?fromgroups=#!topic/nodejs/ivdZuGCF86Q mostra parâmetros de referência para codificação e análise.
Nota : Após o teste, parece que a biblioteca jsurl.js usa funções do ECMAScript 5, como Object.keys, Array.map e Array.filter. Portanto, ele funcionará apenas em navegadores modernos (não ou seja, 8 ou menos). No entanto, são polyfills para essas funções que o tornariam compatível com mais navegadores.
fonte
Usando
encodeURIComponent()
:fonte
Vou oferecer uma alternativa esquisita. Às vezes, é mais fácil usar codificação diferente, especialmente se você estiver lidando com uma variedade de sistemas que nem todos lidam com os detalhes da codificação de URL da mesma maneira. Essa não é a abordagem mais comum, mas pode ser útil em determinadas situações.
Em vez de codificar os dados por URL, você pode codificá-los com base64. O benefício disso é que os dados codificados são muito genéricos, consistindo apenas em caracteres alfa e, algumas vezes,
=
. Exemplo:Matriz de strings JSON:
Esses dados, codificados em URL como o
data
parâmetro:O mesmo, codificado em base64:
A abordagem base64 pode ser um pouco mais curta, mas o mais importante é que é mais simples. Costumo ter problemas ao mover dados codificados por URL entre cURL, navegadores da web e outros clientes, geralmente devido a aspas,
%
sinais incorporados e assim por diante. Base64 é muito neutro porque não usa caracteres especiais.fonte
/
com$
,_
ou qualquer outro caractere que não requer codificação url per RFC 3986.A resposta dada por Delan é perfeita. Apenas adicionando a ele - caso alguém queira nomear os parâmetros ou passar várias strings JSON separadamente - o código abaixo pode ajudar!
JQuery
PHP
Espero que isto ajude!
fonte