/ lib / htmlpurifier / Filter / YouTube.php
YouTube.php
 1  <?php
 2  
 3  class HTMLPurifier_Filter_YouTube extends HTMLPurifier_Filter
 4  {
 5  
 6      /**
 7       * @type string
 8       */
 9      public $name = 'YouTube';
10  
11      /**
12       * @param string $html
13       * @param HTMLPurifier_Config $config
14       * @param HTMLPurifier_Context $context
15       * @return string
16       */
17      public function preFilter($html, $config, $context)
18      {
19          $pre_regex = '#<object[^>]+>.+?' .
20              'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s';
21          $pre_replace = '<span class="youtube-embed">\1</span>';
22          return preg_replace($pre_regex, $pre_replace, $html);
23      }
24  
25      /**
26       * @param string $html
27       * @param HTMLPurifier_Config $config
28       * @param HTMLPurifier_Context $context
29       * @return string
30       */
31      public function postFilter($html, $config, $context)
32      {
33          $post_regex = '#<span class="youtube-embed">((?:v|cp)/[A-Za-z0-9\-_=]+)</span>#';
34          return preg_replace_callback($post_regex, array($this, 'postFilterCallback'), $html);
35      }
36  
37      /**
38       * @param $url
39       * @return string
40       */
41      protected function armorUrl($url)
42      {
43          return str_replace('--', '-&#45;', $url);
44      }
45  
46      /**
47       * @param array $matches
48       * @return string
49       */
50      protected function postFilterCallback($matches)
51      {
52          $url = $this->armorUrl($matches[1]);
53          return '<object width="425" height="350" type="application/x-shockwave-flash" ' .
54          'data="http://www.youtube.com/' . $url . '">' .
55          '<param name="movie" value="http://www.youtube.com/' . $url . '"></param>' .
56          '<!--[if IE]>' .
57          '<embed src="http://www.youtube.com/' . $url . '"' .
58          'type="application/x-shockwave-flash"' .
59          'wmode="transparent" width="425" height="350" />' .
60          '<![endif]-->' .
61          '</object>';
62      }
63  }
64  
65  // vim: et sw=4 sts=4