我正在尝试将从文本区域发布的HTML存储到数据库中。我在一个叫做"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");但似乎什么都不起作用。有什么想法吗?
发布于 2010-09-25 19:30:50
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函数。如果已经内置了,为什么还要自己写呢?foreach循环中的$result前面添加了一个&。如果我不这样做,那么只会修改浅层的副本,而不是变量本身。因此根本不会有任何变化。发布于 2010-09-25 19:31:17
对于数据的检索,不需要使用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被插入到输出中。
发布于 2010-09-25 19:43:21
尼基克更常用的方式
foreach ($data as $key => $row){
$data[$key]['text'] = nl2br($row['text']);
}您确实覆盖了临时$result变量,而您必须将修改后的变量写回到数组中。并给我们的变量起合理的名字。
此外,如果是用户提供的文本,请考虑使用htmlspecialchars()。
https://stackoverflow.com/questions/3793493
复制相似问题