Согласно [1 115] RFC 1738 :
Небезопасный:
Символы могут быть небезопасными по ряду причин. пробел небезопасен, потому что значительные пробелы могут исчезнуть, и незначительные пробелы могут быть представлены, когда URL записываются или набираются или подвергаются обработке программ обработки текстов. символы
"<"
и">"
небезопасны, потому что они используются в качестве разделителей вокруг URL в произвольном тексте; метка кавычки ("""
) используется для разграничивания URL в некоторых системах. Символ"#"
небезопасен и должен всегда кодироваться, потому что он используется во Всемирной паутине и в других системах для разграничивания URL от идентификатора фрагмента/привязки, который мог бы следовать за ним. Символ"%"
небезопасен, потому что он используется для кодировки других символов. Другие символы небезопасны, потому что шлюзы и другие транспортные агенты, как известно, иногда изменяют такие символы. Эти символы"{"
,"}"
,"|"
,"\"
,"^"
,"~"
,"["
,"]"
, и"`"
.Все небезопасные символы должны всегда кодироваться в URL. Например, символ
"#"
должен быть закодирован в URL даже в системах, которые обычно не имеют дело с фрагментом или идентификаторами привязки, так, чтобы, если URL копируется в другую систему, которая использует их, не было необходимо изменить кодирование URL.
Вместо того, чтобы перенаправлять браузер в новое место, почему бы просто не перенаправить запрос от контроллера к другому контроллеру?
return $this->_forward("action", "controller", "module");
Поскольку клиент обрабатывает перенаправление после ответа сервера, я не думаю, что вы можете что-то с этим поделать. Firefox, например, спрашивает пользователя, хочет ли он повторно отправить данные POST в новое место или нет.
Неприятным решением было бы заполнить и вернуть HTML-форму и автоматически отправить ее с помощью JavaScript. : /
Я не слишком хорошо знаком с Zend, но есть два подхода к решению вашей проблемы:
IMO, вы не можете выполнить перенаправление с помощью POST. См. http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3
Как уже было сказано, вы можете сохранить свои POST-данные в сеансе.