Я предложу необычную альтернативу. Иногда проще использовать другую кодировку, особенно если вы имеете дело с множеством систем, которые не все обрабатывают детали кодирования URL одинаково. Это не самый распространенный подход, но он может пригодиться в определенных ситуациях.
Вместо URL-кодирования данных вы можете использовать кодировку base64. Преимущество этого заключается в том, что закодированные данные являются очень общими, состоящими только из буквенных символов, а иногда и из завершающих символов =
. Пример:
Массив строк JSON:
["option", "Fred's dog", "Bill & Trudy", "param=3"]
Эти данные в URL-кодировке как data
параметр:
"data=%5B%27option%27%2C+%22Fred%27s+dog%22%2C+%27Bill+%26+Trudy%27%2C+%27param%3D3%27%5D"
То же, в кодировке base64:
"data=WyJvcHRpb24iLCAiRnJlZCdzIGRvZyIsICJCaWxsICYgVHJ1ZHkiLCAicGFyYW09MyJd"
Подход base64 может быть немного короче, но, что более важно, он проще. У меня часто возникают проблемы с перемещением данных в кодировке URL между cURL, веб-браузерами и другими клиентами, обычно из-за кавычек, встроенных %
знаков и т. Д. Base64 очень нейтрален, потому что не использует специальные символы.