Tôi chỉ đọc this blog entry và đã tạo và sử dụng thành công bộ lọc tùy chỉnh. Tôi thực hiện một số thay đổi đối với mã và thêm hỗ trợ Vimeo:
/**
* Based on: http://sachachua.com/blog/2011/08/drupal-html-purifier-embedding-iframes-youtube/
* Iframe filter that does some primitive whitelisting in a somewhat recognizable and tweakable way
*/
class HTMLPurifier_Filter_MyIframe extends HTMLPurifier_Filter
{
public $name = 'MyIframe';
/**
*
* @param string $html
* @param HTMLPurifier_Config $config
* @param HTMLPurifier_Context $context
* @return string
*/
public function preFilter($html, HTMLPurifier_Config $config, HTMLPurifier_Context $context)
{
$html = preg_replace('#<iframe#i', '<img class="MyIframe"', $html);
$html = preg_replace('#</iframe>#i', '</img>', $html);
return $html;
}
/**
*
* @param string $html
* @param HTMLPurifier_Config $config
* @param HTMLPurifier_Context $context
* @return string
*/
public function postFilter($html, HTMLPurifier_Config $config, HTMLPurifier_Context $context)
{
$post_regex = '#<img class="MyIframe"([^>]+?)>#';
return preg_replace_callback($post_regex, array($this, 'postFilterCallback'), $html);
}
/**
*
* @param array $matches
* @return string
*/
protected function postFilterCallback($matches)
{
// Domain Whitelist
$youTubeMatch = preg_match('#src="https?://www.youtube(-nocookie)?.com/#i', $matches[1]);
$vimeoMatch = preg_match('#src="http://player.vimeo.com/#i', $matches[1]);
if ($youTubeMatch || $vimeoMatch) {
$extra = ' frameborder="0"';
if ($youTubeMatch) {
$extra .= ' allowfullscreen';
} elseif ($vimeoMatch) {
$extra .= ' webkitAllowFullScreen mozallowfullscreen allowFullScreen';
}
return '<iframe ' . $matches[1] . $extra . '></iframe>';
} else {
return '';
}
}
}
Thêm bộ lọc để lọc cấu hình HTML của bạn
$config->set('Filter.Custom', array(new HTMLPurifier_Filter_MyIframe()));
iframe vẫn bị chặn dù sao, không Metter. Bạn có biết một giải pháp tốt khác với hỗ trợ iframe không? – swamprunner7
Ồ vâng, bạn sẽ phải thêm hỗ trợ Iframe riêng biệt. Đây là một cách có thể thực hiện: http://htmlpurifier.org/phorum/read.php?3,4646,4646#msg-4646 Và tất nhiên chúng tôi hy vọng (cuối cùng) thêm hỗ trợ cho nó đúng trong lõi . –
Tôi đã thử giải pháp này, nhưng tôi có vấn đề, ở đây nhận xét cuối cùng của tôi http://stackoverflow.com/questions/4135755/how-do-i-allow-script-object-param-embed-and-iframe-tags-in -htmlpurifier – swamprunner7