如何使用ajax通过URL发布消息并仍保持换行符?

时间:2011-01-11 20:01:29

标签: php javascript ajax comments line-breaks

以下是第A页上的javascript / ajax示例:

var commReq = getXmlHttpRequestObject();
function AddComment(Comment){
    if (commReq.readyState == 4 || commReq.readyState == 0){
        commReq.open("GET", '/receiveComment.php?com='+Comment+'&' + Math.random(), true);
        commReq.onreadystatechange = handleComment;
        commReq.send(null);
    }
}

现在收到评论的php页面(receiveComment.php)PAGE B:

$Comment = mysql_real_escape_string(preg_replace("/[^A-Za-z0-9_,.!@:'\"\/\n ]/","", $_GET['com']));
mysql_query("INSERT INTO Comments (Comment,Date) VALUES ('$Comment','$Date')");

显然这些只是样本剪辑,但是从2页开始。自从我通过ajax用于存储评论以来,页面B从未被人看到过。但我希望能够存储用户可以在textarea框中插入的换行符。任何帮助或建议将不胜感激!

3 个答案:

答案 0 :(得分:1)

使用encodeURIComponent

commReq.open("GET", '/receiveComment.php?com='+encodeURIComponent(Comment)+'&' + Math.random(), true);

您仍然需要对POST进行编码(归功于agrothe)

commReq.open("POST", '/receiveComment.php?' + Math.random(), true);
commReq.onreadystatechange = handleComment;
commReq.setRequestHeader("Content-Type", "multipart/form-data");
commReq.send('com=' + encodeURIComponent(Comment));

答案 1 :(得分:1)

在preg_replace()函数调用中,在第一个参数中,您正在搜索\ n并将其替换为空。这很可能是导致问题的原因,因为\ n表示换行符,因为它用双引号括起来。

我尝试从preg_replace()函数中删除“\ n”。

如果是单引号,它不会将\ n解释为换行符,而是将其作为其面值。

而且仅供参考,通过GET传递信息并不会消除jQuery中的换行符。在较旧的浏览器中,GET确实将请求的URL限制为255个字符(虽然Firefox 1和IE 6天之前),而POST支持无限大小。

答案 2 :(得分:0)

使用POST而不是GET。或者URL编码GET方法的注释。

如果您想保留换行符等,我认为POST会更好地为您服务。