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:
["option", "Fred's dog", "Bill & Trudy", "param=3"]
Esses dados, codificados em URL como o data
parâmetro:
"data=%5B%27option%27%2C+%22Fred%27s+dog%22%2C+%27Bill+%26+Trudy%27%2C+%27param%3D3%27%5D"
O mesmo, codificado em base64:
"data=WyJvcHRpb24iLCAiRnJlZCdzIGRvZyIsICJCaWxsICYgVHJ1ZHkiLCAicGFyYW09MyJd"
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.