У меня проблема с сохранением представленной пользователем презентации в базе данных в виде поля 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 и т. Д., Но я все еще не могу заставить его работать ..
Кто-то, кто мог бы помочь?
Заранее спасибо.
Вы можете перевести их в соответствующие escape-последовательности, используя str_replace, перед тем как передать строку через nl2br (). Это пример:
$profile = nl2br(str_replace('\\r\\n', "\r\n", $profile['presentation']));
Других решений пока нет …