therealvetalhidden, просто POST без AJAX — это из обычной формы с перезагрузкой страницы-то? Браузер при отправке содержимого формы прозрачно кодирует информацию. Пробелы заменяются на плюсы, плюсы на %2B и т.д. Запросы типа GET и POST работают практически одинаково, передаваемые данные одного типа, и ограничения на них накладываются однообразные. Данные GET-запроса передаются прямо в URL. Список символов, которые могут использоваться в URL, ограничен латинскими буквами, цифрами и некоторыми спецсимволами. Все остальные необходимо заменять escape-последовательностями, что и делает функция encodeURIComponent(). Пробел, например, заменяется плюсом. А на сервере при обработке эти последовательности аналогично расшифровываются и плюс заменяется пробелом.
А JS изначально работает с данными в чистом виде. И из форм забирает из без преобразований. Вы же необязательно будете отсылать их на сервер. И когда эти «чистые» данные посылаете AJAX'ом, на сервер уходят они не кодированными, но все равно там раскодируются при обработке и, в итоге, получается такая вот шляпа.