Я считаю, что проблема здесь не в CI или даже в PHP, а в вашем HTTP-запросе.
Допустим, я делаю POST-запрос, который выглядит следующим образом:
POST /path/to/file HTTP/1.1
Host: server.com
User-Agent: Bob the browser/1.0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 25
name=Dave&percentage=%100
Вероятно, вы ожидаете, что $_POST
будет выглядеть так:
Array
(
[name] => Dave
[percentage] => %100
)
Но на самом деле PHP (правильно) расшифрует его так:
Array
(
[name] => Dave
[percentage] => 0
)
Это связано с тем, что %10
является допустимой строкой, закодированной в URL, и будет переведено в непечатаемое и в этом контексте бессмысленное Символ «Data Link Escape» , ASCII 0x10 .
Чтобы получить ожидаемый результат, запрос должен быть таким:
POST /path/to/file HTTP/1.1
Host: server.com
User-Agent: Bob the browser/1.0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
name=Dave&percentage=%25100
Таким образом, значение, которое вы на самом деле отправляете в теле POST, равно %25100
. Это будет правильно декодировано как %100
.