JS TinyMCE сохраняет всю страницу

У меня проблема с TinyMCE, когда я отправляю контент в базу данных, он сохраняется с <!doctype...<html>.....<body>. Я видел несколько сообщений об удалении полностраничного плагина, но в моем случае у меня его нет. Поэтому я попытался удалить его, чтобы быть уверенным, и обновить кеш браузера, и у меня все еще была та же проблема. Я просто хочу сохранить HTML-код между тегами body.

Я отправляю tinyMCE как обычную форму с текстовой областью, имеющей имя POST и с кнопкой отправки.

 <form method="post" action="/profile/edit/profile/text">

        {{ csrf_field() }}

        <input type="hidden" name="text2" value="1">

        <textarea id="tinymce-editor" name="text">{!! $profile -> text !!}</textarea>

        <button class="btn btn-success" type="submit"><i class="fa fa-fw fa-check"></i>Lagre</button>

    </form>

.

/**
 * @return mixed
 *
 * Process profile text
 */
public function postEditText() {

    // Sanitize HTML
    $html = $this -> sanitizeHTML(Input::get('text'));

    // Validate
    $val = Validator::make([
        'text' => $html
    ], [
        'text' => 'sometimes|max:50000'
    ]);

    if ($val -> fails()) {
        return $this -> backWithErrors($val);
    }

    // Update
    Auth::user() -> profile() -> update([
        'text' => $html
    ]);

    return $this -> backWithSuccess('Profilteksten ble lagret!');

}

.

/**
 * @param $html
 * @return string
 *
 * HTML sanitizer
 */
private function sanitizeHTML($html) {

    // Disable entity loader
    libxml_disable_entity_loader(false);

    // New DOM doc
    $d = new \DOMDocument();
    $d -> loadHTML($html);

    // Script tags
    $st = $d -> getElementsByTagName('script');
    $l = $st -> length;

    // Remove
    for ($i = 0; $i < $l; $i++) {
        $st -> item($i) -> parentNode -> removeChild($st -> item($i));
    }

    return $d -> saveHTML();

}

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


person Kaizokupuffball    schedule 29.07.2016    source источник
comment
Итак, какой код вы используете для извлечения содержимого из TinyMCE и сохранения его в базе данных? Если у вас не установлен полностраничный плагин, вызов getContent() позволит получить только то, что находится между тегами body. Не видя рассматриваемого кода, все, что мы будем делать, это предлагать вам догадки.   -  person Michael Fromin    schedule 29.07.2016
comment
Я не использую какой-либо код для извлечения чего-либо. Просто обычная форма с текстовым полем, которое заменено на tinyMCE. Форма отправляется как обычная форма (без AJAX, просто кнопка отправки). Я могу обновить сообщение с кодом.   -  person Kaizokupuffball    schedule 29.07.2016


Ответы (1)


Кажется, у вас есть код, который создает новый DOMDocument, а затем загружает в него HTML.

Если вы зарегистрируете результат Input::get('text'), что вы получите?

Возможно, ваш код в sanitizeHTML() создает полный HTML-документ?

Согласно руководству для DOMDocument, он «представляет собой весь документ HTML или XML; служит корнем дерева документов». Если это так, я подозреваю, что именно это создает весь ваш документ, а не TinyMCE.

person Michael Fromin    schedule 29.07.2016
comment
Черт, ты абсолютно прав. Благодарю вас! Вы знаете, как я могу избавиться от этого? Мне нужно удалить теги <script>, поэтому я выбрал DOMDocument. Есть ли способ просто загрузить данный HTML вместо добавления всего <!doctype... и т. д.? - person Kaizokupuffball; 29.07.2016
comment
Не беда, я нашел решение. Вместо этого используйте это: $d -> loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); Но спасибо! - person Kaizokupuffball; 29.07.2016