Отправка почтового запроса с комментарием HTML через проблему AJAX - PullRequest
4 голосов
/ 23 марта 2012

Я столкнулся со следующей проблемой при отправке формы с помощью jQuery FORM и выполнении POST submit.

Когда я набираю в поле ввода комментарий HTML:

< !-- #without space after < symbol

Запрос никогда не отправляется и ждет бесконечно.

Я полагаю, что причина в том, что комментарий HTML разрушает объект XMLHttpRequest и никогда не анализируется с помощью PHP.Я могу просто разобрать html-комментарии из полей ввода перед отправкой, но что-то подсказывает мне, что это не лучшее решение для решения этой проблемы.Кто-нибудь знает лучшее решение, чтобы избежать этой проблемы?

HTML-код моей формы следующий:

<form method="post" action="/orders/place" class="form a-center" id="orderForm"> 
 <input type="text" x-webkit-speech="" value="Sign text" name="sign" id="sign">
 <textarea rows="7" name="comments" id="comments">Order comments</textarea>
 <p>
  <button id="orderSubmitBtn" class="button" type="submit">
 </p>        
</form>

Javascript представляет собой простую отправку формы jQuery:

var options = {
 dataType: 'json',
 success: function(data) { 
   if (data.ok) {
     //do some action here!
   }
 }
};
$('#orderForm').ajaxSubmit(options); 

Единственный случай, когда он терпит неудачу, это случай, когда я ввожу HTML-тег комментария.

Также здесь есть ссылка на страницу, содержащую форму http://sandsign.com (Просто попробуйте ввести<! - текст в знаке, текст, нажатие на кнопку «Пуск») </p>

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Благодаря RoToRa - я сузил свои исследования до PHP-скрипта, который я публикую.И понял, что это ошибка в классе Zend Filter :-(.

Следующий код PHP с Zend Framework по какой-то причине зависает навсегда при получении <! - в качестве параметра POST: </p>

$filterChain = new Zend_Filter();
$filterChain->addFilter(new Zend_Filter_StringTrim())
            ->addFilter(new Zend_Filter_StripTags());
$this->getHelper('viewRenderer')->setNoRender();
$signFiltered   = $filterChain->filter($_POST['sign']);

Спасибо всем за советы!

1 голос
/ 23 марта 2012

Вместо того, чтобы анализировать только комментарий, вы можете html-кодирование содержимого текстовой области перед отправкой, а затем декодировать его на сервере.Это функции HTML-кодирования / декодирования чего-либо с помощью JQuery:

function htmlEncode(value){
  return $('<div/>').text(value).html();
}

function htmlDecode(value){
  return $('<div/>').html(value).text();
}

через ( HTML-кодирование теряется при чтении атрибута из поля ввода )

, а затем декодируетсяэто в PHP с htmlentities:

http://php.net/manual/es/function.htmlentities.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...