2016-07-29 1 views
0

TinyMCE에서이 문제가 발생했습니다. 콘텐츠를 데이터베이스에 제출하면 <!doctype...<html>.....<body>으로 저장됩니다. 전체 페이지 플러그인 제거에 대한 게시물을 보았지만 제 경우에는 그럴 수 없습니다. 그래서 나는 그것을 지우고 브라우저 캐쉬를 새로 고치려고했지만 여전히 같은 문제가 있습니다. body 태그 사이에 HTML을 저장하기 만하면됩니다.JS TinyMCE가 전체 페이지를 저장 중입니다

POST 이름과 전송 버튼이있는 텍스트 영역이있는 일반 양식처럼 tinyMCE를 제출합니다.

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

} 

미리 감사드립니다.

+0

그래서 TinyMCE에서 콘텐츠를 추출하고 데이터베이스에 저장하는 데 어떤 코드를 사용하고 있습니까? 전체 페이지 플러그인을 설치하지 않은 경우 getContent()를 호출하면 body 태그 사이에있는 내용 만 가져옵니다. 문제의 코드를 보지 않고도 우리가 할 일은 추측을 제공하는 것입니다. –

+0

코드를 추출하는 데 아무 것도 사용하지 않습니다. tinyMCE로 대체되는 텍스트 영역을 가진 보통 형태. 양식은 일반 양식처럼 제출됩니다 (AJAX 없음, 제출 버튼 만). 게시물을 코드로 업데이트 할 수 있습니다. – Kaizokupuffball

답변

1

코드를 새로 작성하면 DOMDocument이되며 HTML이로드됩니다.

Input::get('text')의 결과를 로그하는 경우 어떻게됩니까?

아마 sanitizeHTML()의 코드가 완전한 HTML 문서를 만드는 것입니까?

DOMDocument 설명서에 따르면 "전체 HTML 또는 XML 문서를 나타내며 문서 트리의 루트 역할을합니다." 그렇다면 TinyMCE가 아닌 전체 문서를 만드는 것으로 의심됩니다.

+0

젠장, 너는 옳다. 고맙습니다! 내가 이걸 어떻게 없앨 수 있는지 아십니까? 나는'