добавлено преобразование в специальные сущности если вставили код в текст комментария , пофиксено добавление переноса строки если ранее уже был перенос строки - в итоге между строками увеличивалась путота

This commit is contained in:
2026-01-23 12:10:58 +05:00
parent 22aa5e5b16
commit e08b4dec33
3 changed files with 51 additions and 17 deletions

View File

@@ -21,7 +21,7 @@
* Файлы
* Авторы могут загружать в свои комментарии разрешенные в Админ панели файлы.
* Размер и тип файла задаются в Админ панели. Отдельные права для Анонимов. Для изображений выводятся их превью, для остальных превью с именем расширения этого файла.
* Важно! Разрешив загрузку файлов, особенно Анонимам - вы подвергаете свой сайт дополнительным рискам! Относитесь к этой функции с максимальной острожностью.
* Дополнительные поля
* Два дополнительных поля, их названия и обязательные или нет, настраиваются в Админ панели
* Валидация обязательных полей на заполненность + проверка на разрешения для файлов

View File

@@ -714,9 +714,24 @@ if ($is_allowed_ext && !$is_dangerous && $file['size'] > 0 && $file['size'] <= $
if ($user_rating < 0) $user_rating = 0; if ($user_rating > 5) $user_rating = 5;
$new_comment['user_rating'] = $user_rating;
$comment_text_raw = $_POST['comment_text'] ?? '';
$comment_text_clean = strip_tags(stripslashes($comment_text_raw));
$new_comment['comment_text'] = addslashes($comment_text_clean);
// --- ПОДГОТОВКА И ОБРАБОТКА ТЕКСТА КОММЕНАТРИЯ ЖЕСТКАЯ (вырежет весь тест как только встретит < тег) ---
//$comment_text_raw = $_POST['comment_text'] ?? '';
//$comment_text_clean = strip_tags(stripslashes($comment_text_raw));
//$new_comment['comment_text'] = addslashes($comment_text_clean);
// --- ПОДГОТОВКА И ОБРАБОТКА ТЕКСТА КОММЕНАТРИЯ МЯГКАЯ (с соранением в виде специальных сущностей) ---
// 1. Получаем сырой текст
$comment_text_raw = $_POST['comment_text'] ?? '';
// 2. Убираем лишние слеши
$comment_text_raw = stripslashes($comment_text_raw);
// 3. ПРЕВРАЩАЕМ теги в текст (экранируем), а не вырезаем их
// Теперь <?php станет &lt;?php и просто отобразится как текст
$comment_text_safe = htmlspecialchars($comment_text_raw, ENT_QUOTES, 'UTF-8');
// 4. Подготавливаем для вставки в SQL запрос
$new_comment['comment_text'] = addslashes($comment_text_safe);
$AVE_DB->Query("INSERT INTO " . PREFIX . "_module_comment_info (`" . implode('`,`', array_keys($new_comment)) ."`) VALUES ('" . implode("','", $new_comment) . "')");
$new_comment['Id'] = $AVE_DB->InsertId();
@@ -803,18 +818,34 @@ function commentPostEdit($comment_id)
}
// Обработка текста
$comment_text = $_POST['text'] ?? '';
$comment_text = preg_replace_callback('/&#x([0-9a-f]{1,7});/i', function($matches) { return chr(hexdec($matches[1])); }, $comment_text);
$comment_text = preg_replace_callback('/&#([0-9]{1,7});/', function($matches) { return chr($matches[1]); }, $comment_text);
$comment_text = stripslashes($comment_text);
$comment_text = str_replace(array("<br>\n", "<br />\n", "<br/>\n", "<br>", "<br />"), "\n", $comment_text);
$comment_text = strip_tags($comment_text);
$max = ($row['comment_max_chars'] > 10) ? (int)$row['comment_max_chars'] : 1000;
$comment_text_cut = mb_substr($comment_text, 0, $max);
if (mb_strlen($comment_text) > $max) $comment_text_cut .= '…';
// 1. Получаем текст
$comment_text = $_POST['text'] ?? '';
// 2. Убираем слеши
$comment_text = stripslashes($comment_text);
// 3. Декодируем сущности (чтобы не было &amp;lt;)
$comment_text = html_entity_decode($comment_text, ENT_QUOTES, 'UTF-8');
// 4. УБИРАЕМ ДУБЛИРОВАНИЕ СТРОК:
// Сначала превращаем все варианты переносов (Windows \r\n, Mac \r) в единый \n
$comment_text = str_replace(array("\r\n", "\r"), "\n", $comment_text);
// Теперь заменяем <br> (если они есть) на \n, но так, чтобы не создавать лишних пустых строк
$comment_text = preg_replace('/<br\s*\/?>\n?/i', "\n", $comment_text);
// Удаляем лишние пробелы в концах строк (необязательно, но полезно)
$comment_text = implode("\n", array_map('trim', explode("\n", $comment_text)));
// 5. БЕЗОПАСНОСТЬ: Экранируем обратно для базы
$comment_text = htmlspecialchars($comment_text, ENT_QUOTES, 'UTF-8');
// 6. Ограничение по длине (как у тебя и было)
$max = ($row['comment_max_chars'] > 10) ? (int)$row['comment_max_chars'] : 1000;
if (mb_strlen($comment_text) > $max) {
$comment_text = mb_substr($comment_text, 0, $max) . '…';
}
$comment_text_cut = $comment_text;
// Работа с изображениями (МУЛЬТИЗАГРУЗКА И УДАЛЕНИЕ)

View File

@@ -587,7 +587,10 @@ $doc.off('click', '.mod_comment_edit').on('click', '.mod_comment_edit', function
$('.mod_comment_text').show();
$('.mod_comment_attached_image, .comment-files').show();
var cleanText = $textBlock.html().replace(/<br\s*\/?>/mg, "\n").trim();
// сначала декодируем HTML обратно в текст, а регулярка теперь «съедает» и тег, и возможный перенос после него
var cleanText = $textBlock.html()
.replace(/<br\s*\/?>\n?/gi, "\n") // Убираем <br> и ОДИН символ переноса за ним, если он есть
.trim();
// --- СБОР ТЕКУЩИХ ВЛОЖЕНИЙ ---
var existingImagesHtml = '';