1: | <?php |
2: | |
3: | |
4: | |
5: | |
6: | class HTMLPurifier_Injector_Linkify extends HTMLPurifier_Injector |
7: | { |
8: | |
9: | |
10: | |
11: | public $name = 'Linkify'; |
12: | |
13: | |
14: | |
15: | |
16: | public $needed = array('a' => array('href')); |
17: | |
18: | |
19: | |
20: | |
21: | public function handleText(&$token) |
22: | { |
23: | if (!$this->allowsElement('a')) { |
24: | return; |
25: | } |
26: | |
27: | if (strpos($token->data, '://') === false) { |
28: | |
29: | |
30: | |
31: | return; |
32: | } |
33: | |
34: | |
35: | |
36: | |
37: | |
38: | |
39: | $bits = preg_split( |
40: | '/\\b((?:[a-z][\\w\\-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]|\\((?:[^\\s()<>]|(?:\\([^\\s()<>]+\\)))*\\))+(?:\\((?:[^\\s()<>]|(?:\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'".,<>?\x{00ab}\x{00bb}\x{201c}\x{201d}\x{2018}\x{2019}]))/iu', |
41: | $token->data, -1, PREG_SPLIT_DELIM_CAPTURE); |
42: | |
43: | if ($bits === false) { |
44: | return; |
45: | } |
46: | |
47: | $token = array(); |
48: | |
49: | |
50: | |
51: | |
52: | for ($i = 0, $c = count($bits), $l = false; $i < $c; $i++, $l = !$l) { |
53: | if (!$l) { |
54: | if ($bits[$i] === '') { |
55: | continue; |
56: | } |
57: | $token[] = new HTMLPurifier_Token_Text($bits[$i]); |
58: | } else { |
59: | $token[] = new HTMLPurifier_Token_Start('a', array('href' => $bits[$i])); |
60: | $token[] = new HTMLPurifier_Token_Text($bits[$i]); |
61: | $token[] = new HTMLPurifier_Token_End('a'); |
62: | } |
63: | } |
64: | } |
65: | } |
66: | |
67: | |
68: | |