Не удается получить данные с пробелами в базу данных из запроса Ajax POST - PullRequest
4 голосов
/ 02 мая 2010

У меня есть действительно простая форма с текстовым полем и кнопкой, и моя цель состоит в том, чтобы асинхронный запрос (jQuery: $ .ajax) отправил текст на сервер (PHP / mysql a la Joomla), чтобы он мог быть добавленным в таблицу базы данных.

Вот javascript, который отправляет данные от клиента:

var value= $('#myvalue').val();

$.ajax( {
    type:       "POST",
    url:        "/administrator/index.php",
    data:       {   option: "com_mycomponent",
                    task:   "enterValue",
                    thevalue: value,
                    format: "raw"},
    dataType:   "text",
    success:    reportSavedValue
} );

Проблема возникает, когда пользователь вводит текст с пробелом в нем. Переменная $ _POST, которую я получаю, удаляет все пробелы, поэтому, если пользователь вводит « Эта строка имеет пробелы », сервер получает значение « Thisstringhasspaces ».

Я гуглил и нашел много ссылок, которые мне нужно использовать encodeURIComponent . Итак, я попробовал, но теперь значение, которое я получаю из $ _POST, равно " This20string20has20spaces ".

Так что, похоже, он кодирует его так, как ожидал бы I , только удаляя знаки процента вместо пробелов и оставляя шестнадцатеричные числа.

Я действительно запутался. Похоже, что такого рода вопросы задают и отвечают везде в сети, и везде encodeURIComponent приветствуется как серебряная пуля. Но, видимо, я борюсь с другой породой ликантропа. У кого-нибудь есть предложения?

Ответы [ 2 ]

2 голосов
/ 02 мая 2010

Оказывается, была дополнительная фильтрация, которую я не осознавал, что выполняю. Поскольку все это проходило через Joomla, я использовал JRequest::getCmd('thevalue') вместо $_POST['theValue]. Оказывается, эта функция отфильтровывает все эти проблемные символы, например, «%».

Таким образом, окончательное решение - использовать encodeURIComponent на клиенте, как это единодушно предлагается в Интернете:

var value = encodeURIComponent($('#myvalue').val());

И на сервере, чтобы обменять getCmd() на getVar(), что дает больший контроль над фильтрацией в сочетании с urldecode():

$value = urldecode(JRequest::getvar('thevalue', JREQUEST_ALLOWHTML));

Опять же, большое спасибо Кариму79 и Сезару. Я тебя дублирую, Харкер и Хельсинг - мои герои на весь день! :)

0 голосов
/ 02 мая 2010

Могу ли я побеспокоить вас попробовать это, пожалуйста?

var value = escape($('#myvalue').val());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...