我正在尝试将从textarea发布的HTML存储到数据库中。我在表单中有一个textarea,我称之为“message”。处理它的PHP代码是:
if(isset($_POST['submit'])){
if(isset($_POST['title']) && isset($_POST['message'])){
$title = $_POST['title'];
$message = $_POST['message'];
if(get_magic_quotes_gpc()){
$title = stripslashes($title);
$message = stripslashes($message);
}
$title = mysql_real_escape_string($title);
$message = mysql_real_escape_string($message);
$q = "INSERT INTO table (title,datetime,text) VALUES ('{$title}',NOW(),'{$message}')";
$rows_affected = $db->exec($q);
if($rows_affected > 0){
echo "<p>Done.</p>";
} else {
echo "<p>Failed. </p>";
}
}
}
我遇到的问题是检索此问题并将换行符转换为<br />
。这就是我在做的事情:
$res = array();
$order = array("\r\n","\n","\r");
$replace = '<br />';
$q = "SELECT title,datetime,text FROM table";
$res = $db->get_all($q);
if($res){
foreach($res as $result){
$result['title'] = stripslashes($result['title']);
$result['text'] = str_replace($order, $replace, stripslashes($result['text']));
}
}
echo "<pre>";
print_r($res);
echo "</pre>";
我无法摆脱信息中那些讨厌的\r\n
。我尝试将$order
更改为
$order = array("\\r\\n","\\n","\\r");
// and even
$order = array("\\\r\\\n","\\\n","\\\r");
但似乎没有任何效果。有什么想法吗?
答案 0 :(得分:0)
if ($res = $db->get_all('SELECT title,datetime,text FROM table')){
foreach ($res as &$result){
$result['text'] = nl2br($result['text']);
}
}
echo "<pre>";
print_r($res);
echo "</pre>";
我做了三件事:
stripslashes
。他们一定不能在那里。执行查询时将删除添加的斜杠mysql_real_escape_string
。nl2br
作为新行。如果它已经内置,为什么要自己写点什么?&
循环中的$result
前面添加了foreach
。如果我不这样做,只修改浅拷贝,而不是变量本身。因此根本不会有任何改变。答案 1 :(得分:0)
要检索数据,您无需使用str_replace / stripslashes进行操作。
$res = array();
$q = "SELECT title,datetime,text FROM table";
$res = $db->get_all($q);
if($res){
foreach($res as &$result){
$result['title'] = $result['title']; // Don't see the reason for stripslashes here
$result['text'] = nl2br($result['text']);
}
}
echo "<pre>";
print_r($res);
echo "</pre>";
使用nl2br将您的\ n转换为正确的HTML换行符。 (注意:如果要再次显示文本区域内的文本,例如进行编辑,则需要按原样输出“文本”)。您唯一想做的就是使用strip_tags
来阻止HTML插入到输出中。
答案 2 :(得分:0)
nikic做的更常见的方式
foreach ($data as $key => $row){
$data[$key]['text'] = nl2br($row['text']);
}
你确实覆盖了你的临时$ result变量,而你必须将修改后的变量写回数组。 并为我们的变量提供合理的名称 另外,如果是用户提供的文本,请考虑使用htmlspecialchars()。