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