PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents / 2.0.3
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents v2.0.3
4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 trunk 1.0.0 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 2.0.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2.0 2.2.1 2.2.2 2.3.0 2.3.1 2.3.2 2.3.3 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.1.3 3.2.0 3.2.1 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.14 3.9.15 3.9.16 3.9.17 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9 4.0.0 4.0.1 4.0.10 4.0.11 4.0.12 4.0.13 4.0.14 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.0.9 4.1.0 4.1.1 4.1.10 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 4.3.0 4.3.1 4.4.0 4.4.1 4.4.10 4.4.11 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 4.4.8 4.4.9 4.5.0 4.5.1
embedpress / vendor / ostraining / embera / Lib / Embera / HtmlProcessor.php
embedpress / vendor / ostraining / embera / Lib / Embera Last commit date
Adapters 8 years ago Providers 8 years ago Autoload.php 8 years ago Embera.php 8 years ago FakeResponse.php 8 years ago Formatter.php 8 years ago HtmlProcessor.php 8 years ago HttpRequest.php 8 years ago Oembed.php 8 years ago Providers.php 8 years ago Url.php 8 years ago
HtmlProcessor.php
136 lines
1 <?php
2 /**
3 * HtmlProcessor.php
4 *
5 * @package Embera
6 * @author Michael Pratt <pratt@hablarmierda.net>
7 * @link http://www.michael-pratt.com/
8 *
9 * For the full copyright and license information, please view the LICENSE
10 * file that was distributed with this source code.
11 *
12 */
13 namespace Embera;
14
15 /**
16 * This Class is in charge of replacing content, ignoring specific
17 * html tags.
18 */
19 class HtmlProcessor
20 {
21 /** @var array with tags that should be ignored */
22 protected $tags = array();
23
24 /** @var array With url to html conversion code */
25 protected $replacementTable = array();
26
27 /** @var array with placeholders to be reserved/restored */
28 protected $holder = array();
29
30 /**
31 * Constructor
32 *
33 * @param array $tags The tags that should be ignored
34 * @param array $replacementTable Array with the conversions that should be made
35 * Normally in the url -> html mode.
36 * @return void
37 */
38 public function __construct(array $tags, array $replacementTable)
39 {
40 $this->replacementTable = $replacementTable;
41 $this->tags = $tags;
42 }
43
44 /**
45 * Process the content and does the replacements
46 *
47 * @param string $content
48 * @return string
49 */
50 public function process($content)
51 {
52 foreach ($this->tags as $t) {
53 $content = $this->reserveTag($content, $t);
54 }
55
56 $content = strtr($content, $this->replacementTable);
57 return $this->restoreHolders($content);
58 }
59
60 /**
61 * Reserves a tag, which in this case, all it does is replace the html tag
62 * with a placeholder.
63 *
64 * @param string $content
65 * @param string $tag
66 * @return string
67 */
68 protected function reserveTag($content, $tag)
69 {
70 if (stripos($content, '<' . $tag) !== false) {
71
72 if (in_array(strtolower($tag), array('img'))) {
73 $pattern = '~(<' . preg_quote($tag, '~') . '[^>]+\>)~i';
74 } else {
75 $pattern = '~(<' . preg_quote($tag, '~') . '\\b[^>]*?>[\\s\\S]*?<\\/' . preg_quote($tag, '~') . '>)~i';
76 }
77
78 return preg_replace_callback($pattern, array($this, 'placeHolder'), $content);
79 }
80
81 return $content;
82 }
83
84 /**
85 * Assigns a placeholder to the matched content. Its used by preg_replace_callback
86 *
87 * @param array $matches
88 * @return string
89 */
90 protected function placeHolder(array $matches)
91 {
92 $placeholder = '%{{' . md5(time() . count($this->holder) . mt_rand(0, 500)) . '}}%';
93 $this->holder[$placeholder] = $matches['1'];
94
95 return $placeholder;
96 }
97
98 /**
99 * Restores all the dummy placeholders with the original content
100 *
101 * @param string $content
102 * @return string
103 */
104 protected function restoreHolders($content)
105 {
106 if (!empty($this->holder)) {
107
108 /**
109 * Now the question that you might be asking yourself is, why use a 'for' loop instead
110 * of the plain 'str_replace' function once?
111 *
112 * Well, since html can be nested, there might be cases were a placeholder was placed inside
113 * another placeholder and if we do just one 'str_replace', we might not get the full original
114 * content.
115 *
116 * In order to ensure that no data is lost, we need to run 'str_replace' for each time a tag
117 * was registered in the constructor. That is the worst case scenario, most of the times, the loop
118 * is just going to run once and repeat the cycle only if there are signs that another placeholder is in
119 * the content.
120 */
121 $count = count($this->tags) + 1;
122 for ($i=0; $i < $count; $i++) {
123 $content = str_replace(array_keys($this->holder), array_values($this->holder), $content);
124 if (strpos($content, '%{{') === false) {
125 break;
126 }
127 }
128
129 }
130
131 return $content;
132 }
133 }
134
135 ?>
136