我有一个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...
}
})
我有什么特别明显的东西吗?我被卡住了......
提前感谢您的帮助!
答案 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");
我希望这些图书馆能为您提供帮助。