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:
["option", "Fred's dog", "Bill & Trudy", "param=3"]
Te dane zakodowane w adresie URL jako data
parametr:
"data=%5B%27option%27%2C+%22Fred%27s+dog%22%2C+%27Bill+%26+Trudy%27%2C+%27param%3D3%27%5D"
To samo, zakodowane w base64:
"data=WyJvcHRpb24iLCAiRnJlZCdzIGRvZyIsICJCaWxsICYgVHJ1ZHkiLCAicGFyYW09MyJd"
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.