Chcę wygenerować link do strony za pomocą Javascript. Parametry strony znajdują się w tablicy JavaScript, którą serializuję w formacie JSON.
Chciałbym więc wygenerować taki adres URL:
http://example.com/?data="MY_JSON_ARRAY_HERE"
Jak muszę zmienić znaczenie mojego ciągu JSON (serializacji tablicy), aby uwzględnić go jako parametr w adresie URL?
Jeśli istnieje rozwiązanie korzystające z JQuery, bardzo bym je chciał.
Uwaga: tak, parametry strony muszą znajdować się w tablicy, ponieważ jest ich dużo. Myślę, że później użyję bit.ly, aby skrócić linki.
Odpowiedzi:
źródło
{["
.). Czy istnieje sposób na zakodowanie tylko niezbędnych znaków, abym mógł skrócić moje adresy URL?Możesz użyć,
encodeURIComponent
aby bezpiecznie zakodować URL części ciągu zapytania:lub jeśli wysyłasz to jako żądanie AJAX:
źródło
Chciałem zrobić to samo. Problem polegał na tym, że mój adres URL stawał się zbyt długi. Znalazłem rozwiązanie dzisiaj, korzystając z biblioteki jsUrl.js Bruno Jouhiera .
Nie przetestowałem tego jeszcze dokładnie. Jednak tutaj jest przykład pokazujący długość znaków ciągu wyjściowego po zakodowaniu tego samego dużego obiektu przy użyciu 3 różnych metod:
jQuery.param
JSON.stringify + encodeURIComponent
JSURL.stringify
Oczywiście JSURL ma najbardziej zoptymalizowany format do urlEncoding obiektu js.
wątek pod adresem https://groups.google.com/forum/?fromgroups=#!topic/nodejs/ivdZuGCF86Q przedstawia testy wzorcowe dotyczące kodowania i analizowania.
Uwaga : po przetestowaniu wygląda na to, że biblioteka jsurl.js używa funkcji ECMAScript 5, takich jak Object.keys, Array.map i Array.filter. Dlatego będzie działać tylko w nowoczesnych przeglądarkach (np. 8 i poniżej). Jednak są polyfills dla tych funkcji, które uczyniłyby go kompatybilnym z większą liczbą przeglądarek.
źródło
Używając
encodeURIComponent()
:źródło
Zaproponuję dziwaczną alternatywę. Czasami łatwiej jest użyć innego kodowania, zwłaszcza jeśli masz do czynienia z różnymi systemami, które nie wszystkie obsługują szczegóły kodowania adresów URL w ten sam sposób. Nie jest to najbardziej popularne podejście, ale może się przydać w pewnych sytuacjach.
Zamiast kodować dane w postaci adresu URL, możesz je zakodować w formacie base64. Zaletą tego jest to, że zakodowane dane są bardzo ogólne, składające się tylko ze znaków alfanumerycznych, a czasem końcowych
=
. Przykład:Tablica ciągów JSON:
Te dane zakodowane w adresie URL jako
data
parametr:To samo, zakodowane w base64:
Podejście base64 może być nieco krótsze, ale co ważniejsze, jest prostsze. Często mam problemy z przenoszeniem danych zakodowanych w adresie URL między cURL, przeglądarkami internetowymi i innymi klientami, zwykle z powodu cudzysłowów, osadzonych
%
znaków i tak dalej. Base64 jest bardzo neutralny, ponieważ nie używa znaków specjalnych.źródło
/
z$
,_
lub dowolny inny znak, który nie wymaga url kodowanie za RFC 3986.Odpowiedź udzielona przez Delan jest doskonała. Wystarczy dodać do tego - na wypadek, gdyby ktoś chciał nazwać parametry lub osobno przekazać wiele ciągów JSON - poniższy kod może pomóc!
JQuery
PHP
Mam nadzieję że to pomoże!
źródło