Проблемы с CKeditor? сбрасывает html теги

Всем привет! Есть такой код, который редактирует данные пользователя с фронтенда, код полностью рабочий, но проблема в CKeditor, при заполнении с фронтенда все html теги в редакторе проставляются, а после отправки формы в редакторе все html теги сбрасываются, кроме и в админку приходит тоже все в теге .

Дополнительное поле пользователя сделал через ExtraFields, в админке тип поля «О себе» тоже текстовый редактор. Может кто сталкивался как сделать, что бы Ckeditor сохранял все html теги и передавал это в админку. Может есть какие-нить замены, другие текстовые редакторы. Пробовал с Tinymce, тоже самое.
[[UpdateProfile?
  &validate=`fullname:required`
  &reloadOnSuccess=`1`
  &preHooks=`hookProfileUpdatePhoto`
]]

<div class="form-block-wr">
    <div class="form-block">
    [[+login.update_success:is=`1`:then=`<div class="alert alert-success" role="alert">[[%login.profile_updated? &namespace=`login` &topic=`updateprofile`]]</div>`:else=`[[+error.message:notempty=`<div class="updprof-error alert alert-danger" role="alert">[[+error.message]]</div>`]]`]]
      <!-- форма, содержащая кнопку для удаления фото -->
      [[+photo:notempty=`<form class="form-items" action="[[~[[*id]]]]" method="post">
        <div class="remove-wr">
          <input type="hidden" name="remove-photo">
          <input type="hidden" name="fullname" value="[[+fullname]]">
          <input type="submit" class="btn btn-danger" value="Удалить фото" name="login-updprof-btn" id="login-updprof-btn">
        </div>
      </form>`]]
      <div class="form-item form-item-photo">
        <img src="[[+photo:default=`/assets/images/img-users/default.jpg`]]" class="" id="photouser" alt="[[+fullname]]">
      </div>

        <form class="form form-items" action="[[~[[*id]]]]" method="post" enctype="multipart/form-data">
        <input type="hidden" name="nospam" value="">
        <div class="form-item">
          <label for="fullname" class="form-label">[[!%login.fullname? &namespace=`login` &topic=`updateprofile`]]</label>
          <input type="text" name="fullname" class="form-control[[+error.fullname:notempty=` is-invalid`]] form-control-form" id="fullname" value="[[+fullname]]">
          <div class="invalid-feedback">[[+error.fullname]]</div>
        </div>
        <div class="form-item">
          <label for="website" class="form-label">[[!%login.website]]</label>
          <input type="text" name="website" class="form-control[[+error.website:notempty=` is-invalid`]] form-control-form" id="website" value="[[+website]]">
          <div class="invalid-feedback">[[+error.website]]</div>
        </div>
        <div class="form-item">
          <label for="about_me" class="form-label">О себе</label>
          <textarea name="about_me" class="form-control[[+error.about_me:notempty=` is-invalid`]] form-control-form" id="about_me">[[+about_me]]</textarea>
          <div class="invalid-feedback">[[+error.about_me]]</div>
        </div>
        <!-- блок, содержащий поле photo, с помощью которого будем загружать фото -->
        <div class="form-item form-item-ft">
          <label for="photo" class="form-label">Фото</label>
          <input type="file" id="photo" name="photo" class="form-control">
          <div class="invalid-feedback"></div>
        </div>
        <input type="submit" class="btn btn-primary" value="Обновить" name="login-updprof-btn" id="login-updprof-btn">
      </form>
    </div>
</div>

<script src="https://cdn.ckeditor.com/ckeditor5/34.0.0/classic/ckeditor.js"></script>
<script src="https://cdn.ckeditor.com/ckeditor5/34.0.0/classic/translations/ru.js"></script>
<script>
    ClassicEditor
    .create(document.querySelector('#about_me'), {
        allowedContent: true,
        removePlugins: ['Table', 'MediaEmbed'], // Убираем плагины таблицы и медиа
        language: 'ru'
    })
    .catch(error => {
    console.error(error);
    });
</script>
Илья
21 марта 2025, 14:20
modx.pro

Комментарии: 2

Артур Шевченко
21 марта 2025, 22:34
+1
1. Оставлять все тэги нельзя. Почитай про XSS
2. Если с TinyMCE, то тэги режет не редактор, а Login
    Илья
    23 марта 2025, 18:52
    0
    Спасибо, поискал инфу и тоже понял, что дело в login. Написал posthooks
    <?php
    // Получаем данные из запроса
    $aboutMe = $modx->getOption('about_me', $_POST, '');
    
    // Удаляем нежелательные HTML-теги (по желанию) и сохраняем с разрешёнными тегами
    $allowedTags = '<p><a><strong><i>
    <h2><h3><h4><ul><ol><li><blockquote>'; // Разрешённые теги
    $aboutMe = strip_tags($aboutMe, $allowedTags);
    
    // Сохраняем данные обратно в базу данных
    $userId = $modx->user->get('id');
    $userProfile = $modx->getObject('modUserProfile', $userId);
    if ($userProfile) {
        $userProfile->set('about_me', $aboutMe);
        $userProfile->save();
    }
    Заработало, выбрал только нужные теги. Все шикарно сохраняет.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2