Согласно http://php.net/manual/en/function.urldecode.php , PHP делает urldecode() на $_GET и $_REQUEST (который содержит $_POST ).
Но прямо вызывает $_POST уже декодированный?
Да, все параметры, которые вы получаете через $_GET и $_POST , декодируются.
Причина, по urldecode() документация urldecode() не упоминает $_POST заключается в том, что данные POST не могут быть в первую очередь кодированы URL. Это зависит от того, представлены ли данные POST в формате application/x-www-form-urlencode или формате multipart/form-data .
Но все это прозрачно для приложения.
Однако документация на $_GET упоминает это явно.
Примечание .
Переменные GET передаются черезurldecode().