Mysql没有保留Jquery ajax帖子的换行符?

时间:2010-02-21 18:51:59

标签: php mysql jquery

我有一个PHP / Mysql应用程序,允许用户从表单发布文本。当我将HTML textarea中的文本插入到我的mysql表中时,它不会保留回车符/换行符。文本不作为“Hey SO,\ n这是一个新行”存储在DB中。它存储在列中的空白区域(就像它的类型一样),但我无法用nl2br()输出它并保留中断。我在插入文本之前就逃避了:

$foo_text = mysql_real_escape_string(ucfirst($_POST['foo_text']));

但即使我删除所有内容并只使用POST参数,它仍然会做同样的事情。这与我通过ajax序列化和发布此表单有什么关系(我正在使用JQUERY)?我找到this on stackoverflow,但我真的没有看到解决方案。我发帖是:

$.ajax({
        type: "POST",
        url: "insertFooBar.php",
        data: $("#foo_form").serialize(),
        success: function(msg) {
            ETC...
        }
    })

我有什么特别明显的东西吗?我被卡住了......

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

问题是序列化应该将换行符编码为%D0%DA,,但jQuery将其编码为%0A

我找到的唯一(无优雅)解决方案是获取表单序列化字符串,然后使用替换函数修改它,例如:

function keepLB(str){

var reg = new RegExp(“(%0A)”,“g”); return str.replace(reg,“%0D $ 1”); }

修改序列化字符串后,我使用$ .post()函数发送它。

希望它会有所帮助!

答案 1 :(得分:2)

感谢您的回答。我最终删除了serialize()并手动将每个参数作为字符串发送。我将$("#foo_bar").replace( /\n/g, '<br>' ))添加到我的textarea作为解决方法,现在我正在休息。希望我不必破坏它以使其工作,但它完成了工作。

答案 2 :(得分:1)

我从来没有遇到任何问题从HTML表单插入数据到数据库,无论是正常提交​​的表单还是使用AJAX。

您是否尝试在没有AJAX的情况下提交表单?结果是什么?我建议您使用jQuery form plugins,这样您就不必手动执行AJAX请求。

我还建议您使用AdoDB将数据保存到数据库中。该库提供了很好的跨数据库抽象。插入/更新数据时没有发现任何问题,所有值转义都是自动完成的。以下是使用AdoDB进行更新的示例方法:

$data['foo_text'] = ucfirst($_POST['foo_text']);
$adodb->AutoExecute($tablename, $data, 'UPDATE', "id=$id");

我希望这些图书馆能为您提供帮助。