HTMLPurifier iFrame / регулярное выражение - PullRequest
0 голосов
/ 28 февраля 2011

Я использую код, предоставленный на форумах HTMLPurifier, чтобы разрешить поддержку тегов iFrame, поскольку Google, YouTube и другие теперь используют iframe вместо встраивания для видео и карт.

Вот код:

class HTMLPurifier_Filter_MyIframe extends HTMLPurifier_Filter
{
    public $name = 'MyIframe';

    public function preFilter($html, $config, $context) {
        return preg_replace("/iframe/", "img class=\"MyIframe\" ", $html);
    }

    public function postFilter($html, $config, $context) {
       $post_regex = '#<img class="MyIframe" ([^>]+)>#';
       return preg_replace_callback($post_regex, array($this, 'postFilterCallback'), $html);
    }

    protected function postFilterCallback($matches) {
        return '<iframe '.$matches[1].'></iframe>';
    }
}

Это почти работает, за исключением одной проблемы, это результат:

<iframe height="275" src="omitted"></iframe> "class="MyIframe" >"

Как сделать так, чтобы класс был частью тега iframe?

ОБНОВЛЕНИЕ: Извините, после отправки сообщения увидел соответствующий вопрос. Первоначальный поиск ничего не дал. Вот что нужно было изменить в функции preFilter:

return preg_replace("/iframe/", "img class=\"MyIframe\" ", preg_replace("/<\/iframe>/", "", $html));

1 Ответ

0 голосов
/ 28 февраля 2011

Измените регулярное выражение preFilter на:

return preg_replace("/iframe/", "img class=\"MyIframe\" ", preg_replace("/<\/iframe>/", "", $html));
...