我在使用jQuery FORM提交表单并进行POST提交时遇到了以下问题。
当我在输入字段中输入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表单的页面的链接(只需尝试输入&lt;! - 文本符号文本按下Lets Go按钮)
答案 0 :(得分:1)
您可以在提交之前对textarea内容进行html编码,然后在服务器中对其进行解码,而不是仅解析注释。这些是使用JQuery进行html编码/解码的函数:
function htmlEncode(value){
return $('<div/>').text(value).html();
}
function htmlDecode(value){
return $('<div/>').html(value).text();
}
via(HTML-encoding lost when attribute read from input field)
然后使用htmlentities在PHP中对其进行解码:
答案 1 :(得分:1)
感谢RoToRa - 我将我的研究范围缩小到我要发布的PHP脚本。并意识到这是Zend Filter类中的一个错误:-(。
以下PHP代码与Zend Framework出于某种原因永远冻结,同时接收&lt; ! - 作为POST参数:
$filterChain = new Zend_Filter();
$filterChain->addFilter(new Zend_Filter_StringTrim())
->addFilter(new Zend_Filter_StripTags());
$this->getHelper('viewRenderer')->setNoRender();
$signFiltered = $filterChain->filter($_POST['sign']);
感谢大家的建议!