Вставка и извлечение текста с помощью новых строк - PullRequest
1 голос
/ 12 марта 2012

У меня небольшая проблема с добавлением новых строк в текстовые поля. После отправки формы текст в базе данных показывает что-то вроде:

"текст \ r \ nfor" (я нахожусь на окнах)

Для следующего текста:
"текст
для "

Затем, после того как я извлеку соответствующий текст из базы данных в текстовой области, он показывает:

"текст \ г \ п \ к"

Я использую PHP и помещаю текст в текстовое поле следующим образом:

<textarea name="post_content">{$post_content}</textarea>

Я хочу, чтобы он правильно отображался с символом новой строки вместо \ n или \ r \ n.

Ответы [ 3 ]

2 голосов
/ 12 марта 2012

Текст, хранящийся в базе данных, содержит один \, что означает экранирование n, которое происходит до того, как может быть выполнен перевод новой строки.

Самое простое решение - сохранить текст со второй\, вот так:

text\\r\\nfor

Это будет затем обработано PHP как:

text\r\nfor

, что создаст HTML с новой строкой.

0 голосов
/ 13 марта 2012

Моя последняя ставка заключается в том, что вы используете подготовленные выписки и дополнительно экранируете свое значение перед вводом, например

// newlines will be replaced with '\n' here
$value = mysql_escape_string($_POST["value"]);

$stmt = $dbh->prepare("INSERT INTO myTable (value) VALUES (?)");

// mysql will insert the contents of $value literally. 
// so instead of a newline, you will have '\n' (two characters) in your database
$stmt->bindParam(1, $value);

// if you did this statement, everything would be fine. mysql would see your '\n'
// and replace it back to a newline. 
mysql_query("INSERT INTO myTable (value) VALUES ('$value')");

Если это так, вам не нужно экранировать свои значения.bindParam сделает это за вас.Вот несколько примеров того, как вы можете безопасно передавать пользовательский ввод в вашу базу данных.

// not escaped 
$value = $_POST["value"];

// escape characters that have special meaning for mysql
$value2 = mysql_escape_string($_POST["value2"]);

// $value2 gets inserted into the query-string. we needed to 
// escape it's contents to not mix it up with actual SQL code.
$stmt = $dbh->prepare("INSERT INTO myTable (value, value2) VALUES (?, '$value2')");

// $value gets inserted using bindParam. everything is fine here.
$stmt->bindParam(1, $value);
0 голосов
/ 13 марта 2012

Что вам нужно сделать, это закодировать новые строки в значение, которое вы отображаете в текстовой области.Вы можете сделать это в функции html_encode на стороне сервера или на стороне клиента.Поэтому в основном вы заменяете все \n, \r, \r\n на <br>. Дайте мне знать, если это работает

...