JS TinyMCE menyimpan satu halaman penuh

Saya punya masalah dengan TinyMCE, ketika saya mengirimkan konten ke database, konten itu disimpan dengan <!doctype...<html>.....<body>. Saya melihat beberapa postingan tentang menghapus plugin halaman penuh, tetapi dalam kasus saya, saya tidak memilikinya. Jadi saya mencoba menghapusnya untuk memastikan, dan menyegarkan cache browser saya, dan saya masih mendapatkan masalah yang sama. Saya hanya ingin menyimpan HTML di antara tag body.

Saya mengirimkan tinyMCE seperti formulir biasa dengan area teks memiliki nama POST dan dengan tombol kirim.

 <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();

}

Terima kasih sebelumnya.


person Kaizokupuffball    schedule 29.07.2016    source sumber
comment
Jadi kode apa yang Anda gunakan untuk mengekstrak konten dari TinyMCE dan menyimpannya ke database? Jika Anda belum memasang plugin halaman penuh, panggilan ke getContent() hanya akan mendapatkan apa yang ada di antara tag body. Tanpa melihat kode yang dipermasalahkan, yang kami lakukan hanyalah memberikan tebakan kepada Anda.   -  person Michael Fromin    schedule 29.07.2016
comment
Saya tidak menggunakan kode apa pun untuk mengekstrak apa pun. Hanya form biasa dengan textarea yang diganti dengan tinyMCE. Formulir dikirimkan seperti formulir biasa (tanpa AJAX, hanya tombol kirim). Saya dapat memperbarui postingan dengan kode.   -  person Kaizokupuffball    schedule 29.07.2016


Jawaban (1)


Tampaknya Anda memiliki kode yang membuat DOMDocument baru dan kemudian memuat HTML ke dalamnya.

Jika Anda mencatat hasil Input::get('text') apa yang Anda dapatkan?

Mungkin kode Anda di sanitizeHTML() yang membuat dokumen HTML lengkap?

Menurut manual untuk DOMDocument itu "Mewakili seluruh dokumen HTML atau XML; berfungsi sebagai akar pohon dokumen." Jika itu masalahnya, saya curiga itulah yang membuat seluruh dokumen Anda - bukan TinyMCE.

person Michael Fromin    schedule 29.07.2016
comment
Sial, kamu benar sekali. Terima kasih! Tahukah Anda bagaimana saya bisa menghilangkan ini? Saya perlu menghapus tag <script>, itu sebabnya saya menggunakan DOMDocument. Apakah ada cara untuk hanya memuat HTML yang diberikan daripada menambahkan keseluruhan <!doctype... dll? - person Kaizokupuffball; 29.07.2016
comment
Tidak apa-apa, saya menemukan solusinya. Sebagai gantinya menggunakan ini: $d -> loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); Tapi terima kasih! - person Kaizokupuffball; 29.07.2016