Безопасное хранение ввода textarea с помощью новых строк и сохранение переносов строк

У меня проблема с сохранением представленной пользователем презентации в базе данных в виде поля TEXT. Это не должно позволять какой-либо HTML вообще но следует сохранить разрывы строк.

Например, если пользователь отправляет презентацию, подобную этой, из формы, используя текстовую область в качестве метода ввода:

Это строка 1

Это строка 3
Это строка 4

Он должен быть выведен точно так же и очищать ввод от любого HTML в процессе.

Хранимая процедура:

   if (isset($_POST['presentation'])) {
$presentation = $purifier->purify($_POST['presentation']);
$presentation = $mysqli->real_escape_string($presentation);
if (strlen($presentation) > 1000) {
return 2;
}
}
else {
$presentation = null;
}

if ($update_stmt = $mysqli->prepare("UPDATE user SET user_presentation = ?
WHERE user_id = ?")) {
$update_stmt->bind_param('ss', $presentation, $user_id);
}
if ($update_stmt->execute() == false) {
$success = 0;
}
$update_stmt->close();

И выводить после выборки:

<p><?php echo nl2br($profile['presentation']); ?></p>

Он хранится как это в базе данных:

This is line 1\r\n\r\nThis is line 3\r\nThis is line 4

И отображается на странице как:

This is line 1rnrnThis is line 3rnThis is line 4

Я хочу, чтобы презентация отображалась как он был представлен пользователем с сохранением новых строк, очищенных от любого HTML и безопасным для хранения в базе данных.

Я пробовал strip_tags, stripcslashes и т. Д., Но я все еще не могу заставить его работать ..

Кто-то, кто мог бы помочь?

Заранее спасибо.

1

Решение

Вы можете перевести их в соответствующие escape-последовательности, используя str_replace, перед тем как передать строку через nl2br (). Это пример:

$profile = nl2br(str_replace('\\r\\n', "\r\n", $profile['presentation']));
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]