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

0

Я пытаюсь сохранить 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");

но ничего не работает. Любые идеи?

  • 0
    Да, та же проблема. Когда это не сработало, тогда я переключился на метод, описанный выше. Насколько я знаю, nl2br () удаляет только \ n, а не \ r \ n.
  • 0
    О, вы удалили этот вопрос. Меня спросили, использовал ли я nl2br ().
Показать ещё 8 комментариев
Теги:
newline
backslash

3 ответа

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. Если бы я этого не делал, менялись только мелкие копии, а не сами переменные. Таким образом, изменений не было бы вообще.
  • 0
    Msgstr "Кроме того, я добавил & перед $ result". BANG! Это была проблема. Большое спасибо!
  • 0
    На самом деле вы сделали 4 вещи: вы оставили бесполезным `$ result ['title'] = $ result ['title'];` строка на месте :)
0

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

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

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

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 в ваш вывод.

  • 0
    Он не использует магические кавычки, он удаляет их.
  • 0
    Упс. Правда, я был слишком быстр в этом.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню