2016-08-10 9 views
2

YouTubeとVimeoのためにHTMLPurifierをiframeとして受け入れるように設定しようとしています。これに関連する多くの郵便は年を切っているように見え、そして/または単に働かない。私が得ることができる最も近いものはiframeを保存していますが、srcは削除されています。HTMLPurifierでYouTubeを取り除く

これは私が現時点で持っているものです(出力時にはiframeが削除されています)。私はこの質問が何度も尋ねられているが、何も私のために働いていることを認識しています。前もって感謝します!

UPDATE

私はまたしてもYouTubeのためのデフォルトの設定の設定がありmewebstudio/Purifierhttps://github.com/mewebstudio/Purifierを、試してみました。 iframeはまだ削除されています。私は何が欠けていますか?

// HTMLPurifier 
    $config = \HTMLPurifier_Config::createDefault(); 

    $config->set('HTML.Doctype', 'HTML 4.01 Transitional'); 
    $config->set('AutoFormat.RemoveEmpty.Predicate', [ 
     'colgroup' => 
      [], 
     'th' => 
      [], 
     'td' => 
      [], 
     'o:p' => 
      [] 
    ]); 
    $config->set('AutoFormat.RemoveEmpty', true); 
    $config->set('AutoFormat.RemoveEmpty.RemoveNbsp', true); 
    $config->set('HTML.Allowed', 'p,span[style|class],a[href|title],abbr[title],acronym[title],b,strong,blockquote[cite],code,em,i,iframe[src|width|height],img[alt|title|class|src|height|width],h1,h2,h3,h3,ol,ul,li,table[class|style],tr,td,hr'); 
    $config->set('HTML.SafeIframe', true); 
    $config->set('URI.SafeIframeRegexp', '%^(\/\/www\.youtube(?:-nocookie)?\.com\/embed\/|\/\/player\.vimeo\.com\/)%'); 

    $def = $config->getHTMLDefinition(true); 
    $def->addAttribute('iframe', 'allowfullscreen', 'Bool'); 

    $purifier = new \HTMLPurifier($config); 
    $input['body'] = $purifier->purify($input['body']); 

答えて

1

オリジナルコードには2つの問題がありました。まず、正規表現は無効です - http:を考慮しませんでした。それは'%^(https?:)?(\/\/www\.youtube(?:-nocookie)?\.com\/embed\/|\/\/player\.vimeo\.com\/)%'

に置き換えられました。次に、$config->set('AutoFormat.RemoveEmpty', true);は、iframe(これは意味があります)を削除しているようです。以下のように修正しました。

$config->set('AutoFormat.RemoveEmpty.Predicate', [ 
      'iframe' => 
       array (
        0 => 'src', 
       ) 
     ]); 

これについての助けを借りてくれたエドワード・ヤンに感謝します!

関連する問題