Я предложу странную альтернативу.Иногда проще использовать другую кодировку, особенно если вы имеете дело с различными системами, которые не все обрабатывают детали кодирования 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 очень нейтрален, потому что не использует специальные символы.