问题是:如何保存用户输入的换行符到数据库。(jQuery/php/mysql)
我有一个可供用户编辑的段落。
<p contenteditable="true" id="forbiddenField">Text</p>
当我从数据库中检索数据时:
<p contenteditable="true" id="forbiddenField"><?php echo nl2br($forbidden); ?></p>
效果很好。
onblur (.blur)将激活一个jQuery脚本,该脚本将把新编辑的数据发送到数据库。
$("#forbiddenField").blur(function(){
var whatIsNowForbidden = encodeURI($("#forbiddenField").text());
$.ajax({
type: "POST",
url: "updateForbidden.php",
data: "forbiddenStuff="+ whatIsNowForbidden,
success: function(){
}
});
});
问题:如果用户插入带有换行符的新数据,则不会将换行符添加到数据库中的数据中,只会添加内容。
我在其他事情中尝试了这个:var whatIsNowForbidden = encodeURI($("#forbiddenField").text());
我在这些地方寻找答案:文本区的新行转换为
http://www.w3schools.com/tags/ref_urlencode.asp替换换行符UTF-8安全吗?如何转义输入,但保存未转义到数据库如何识别每一个换行?
我不能使它工作。所有的输入和提示是非常感激!
尝试从javascript中删除encodeURI()
函数,如下所示:
var whatIsNowForbidden = $("#forbiddenField").text();
我做了一个测试,javascript的encodeURI()
函数似乎没有把段落中的新行翻译成%0A
,就像我们期望的那样。
通过删除encodeURI()
函数,PHP应该能够将文本(包括新行)保存到数据库。然后,PHP的nl2br()
应该将新行转换为<br />
标记,没有问题。
小提琴在这里:http://jsfiddle.net/LN7QC/
最终答案: use <textarea>
$("#forbiddenField").blur(function(){
var whatIsNowForbidden = $("#forbiddenField").val();
$.ajax({
type: "POST",
url: "updateForbidden.php",
data: "forbiddenStuff="+ whatIsNowForbidden,
success: function(){
}
});
});
添加到数据库:
<?php
include('connect.php');
if($_POST['forbiddenStuff']){
$forbiddenInput = $_POST['forbiddenStuff'];
}
If($forbiddenInput){
mysql_query("SET NAMES 'utf8'");
$changeDataInDB = "UPDATE heroes_and_helpers SET forbidden='$forbiddenInput' WHERE name ='sabina'";
mysql_query($changeDataInDB);
}
?>
从数据库取回数据:
mysql_query("SET NAMES 'utf8'");
$fetchForbidden = mysql_query("SELECT * FROM heroes_and_helpers WHERE name='sabina'");
if (!$fetchForbidden)
{
die('Ngt ar fel: ' . mysql_error());
}
$whatIsForbidden = mysql_fetch_array($fetchForbidden);
$forbidden = $whatIsForbidden['forbidden'];
:
<textarea id="forbiddenField" style="width: 450px; height: 500px;"><?php echo $forbidden; ?></textarea>