#javascript #ampersand
#javascript #амперсанд
Вопрос:
У меня есть текстовое поле, которое я использую JavaScript для извлечения значения и отправки в базу данных MySQL с помощью PHP-скрипта (не спрашивайте почему — долгая история и неизбежное разрешение!).
Скрипт PHP очищает входные данные, но по какой-то причине амперсанды никогда не попадают в указанный скрипт — он также удаляет любую информацию после амперсанда.
var Reason = $('textarea#txt_reason').val();
Reason = Reason.replace(/amp;/g,'amp;amp;');
Если я использую приведенное выше, весь текст после амперсанда отбирается.
var Reason = $('textarea#txt_reason').val();
Reason = Reason.replace(/amp;/g,'&');
Если я использую приведенное выше, & действительно отправляется на PHP и, следовательно, в базу данных MySQL.
Если я var_dump
выполняю запрос $ _GET в PHP-скрипте, амперсанды никогда не заходят так далеко, поэтому это не имеет ничего общего с mysql_real_escape_string / htmlentities и т. Д.
Есть ли способ напрямую отправить «amp;» в мой PHP-скрипт без необходимости кодирования / декодирования?
Приветствую, Дункан
Комментарии:
1. Можете ли вы опубликовать код, который вы используете для отправки
Reason
в php-скрипт?2. Вы могли бы просто использовать встроенную функцию Javascript
encode(str)
. Я не слишком знаком с PHP, но обычно все, что извлекает значения из строки http-запроса, должно автоматически декодировать закодированные элементы.
Ответ №1:
Любые данные, которые вы отправляете с помощью Javascript, должны быть закодированы encodeURIComponent()
. Это позаботится о amp;, = и других нарушителях. Данные автоматически декодируются в массив $_GET.
(Большинство фреймворков Javascript, таких как jQuery, делают это за вас …)
Комментарии:
1. Я думаю, что в этом и заключается проблема: фреймворк / API, который я использую, неправильно обрабатывает амперсанд. Спасибо!