Передача амперсанда из JavaScript в PHP / MySQL

#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, который я использую, неправильно обрабатывает амперсанд. Спасибо!