MySQL косая черта и nl2br - PullRequest
       5

MySQL косая черта и nl2br

0 голосов
/ 25 сентября 2010

Я пытаюсь сохранить HTML, размещенный из текстовой области, в базе данных.У меня есть текстовая область внутри формы, которую я назвал «сообщение».Код 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 />.Вот что я делаю:

<code>$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 "
";

Я просто не могу избавиться от этих надоедливых \r\n в сообщении. Я пытался изменить $orderна

$order = array("\\r\\n","\\n","\\r");
// and even
$order = array("\\\r\\\n","\\\n","\\\r");

но, похоже, ничего не работает. Есть идеи?

Ответы [ 3 ]

0 голосов
/ 25 сентября 2010

Для получения данных вам не нужно оборачиваться с помощью str_replace / stripslashes.

<code>$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 "
";

Используйте nl2br, чтобы преобразовать \ n в правильные разрывы строк HTML. (Примечание. Если вы хотите снова отобразить текст внутри текстовой области, например, для редактирования, вам нужно вывести «текст» как есть). Единственное, что вы хотели бы сделать, это использовать strip_tags, чтобы предотвратить вставку HTML в ваш вывод.

0 голосов
/ 25 сентября 2010

более обычный способ того, что сделал nikic

foreach ($data as $key => $row){
  $data[$key]['text'] = nl2br($row['text']);
}

вы перезаписали временную переменную $ result, в то время как вам пришлось записать измененную переменную обратно в массив. и дать нашим переменным разумные имена.
Кроме того, рассмотрите возможность использования htmlspecialchars (), если это пользовательский текст.

0 голосов
/ 25 сентября 2010
<code>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 "
";

Я сделал три вещи:

  • Удалить stripslashes. Они не должны быть там. Косые черты mysql_real_escape_string добавления удаляются при выполнении запроса.
  • Я использовал функцию nl2br для новых строк. Зачем писать что-то самостоятельно, если оно уже встроено?
  • Я добавил & перед $result в цикле foreach. Если я этого не делал, изменялись только мелкие копии, а не сами переменные. Таким образом, никаких изменений не будет.
...