diff options
Diffstat (limited to 'vendor/fguillot/picofeed/lib/PicoFeed/Filter/Tag.php')
m--------- | vendor/fguillot/picofeed | 0 | ||||
-rw-r--r-- | vendor/fguillot/picofeed/lib/PicoFeed/Filter/Tag.php | 173 |
2 files changed, 173 insertions, 0 deletions
diff --git a/vendor/fguillot/picofeed b/vendor/fguillot/picofeed deleted file mode 160000 -Subproject 0a1d0d3950f7f047dc8fb1d80aa6296e15f306d diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Filter/Tag.php b/vendor/fguillot/picofeed/lib/PicoFeed/Filter/Tag.php new file mode 100644 index 000000000..40f7c6c98 --- /dev/null +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Filter/Tag.php @@ -0,0 +1,173 @@ +<?php + +namespace PicoFeed\Filter; + +/** + * Tag Filter class + * + * @author Frederic Guillot + * @package Filter + */ +class Tag +{ + /** + * Tags whitelist + * + * @access private + * @var array + */ + private $tag_whitelist = array( + 'audio', + 'video', + 'source', + 'dt', + 'dd', + 'dl', + 'table', + 'caption', + 'tr', + 'th', + 'td', + 'tbody', + 'thead', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'strong', + 'em', + 'code', + 'pre', + 'blockquote', + 'p', + 'ul', + 'li', + 'ol', + 'br', + 'del', + 'a', + 'img', + 'figure', + 'figcaption', + 'cite', + 'time', + 'abbr', + 'iframe', + 'q', + ); + + /** + * Check if the tag is allowed and is not a pixel tracker + * + * @access public + * @param string $tag Tag name + * @param array $attributes Attributes dictionary + * @return boolean + */ + public function isAllowed($tag, array $attributes) + { + return $this->isAllowedTag($tag) && ! $this->isPixelTracker($tag, $attributes); + } + + /** + * Return the HTML opening tag + * + * @access public + * @param string $tag Tag name + * @param string $attributes Attributes converted in html + * @return string + */ + public function openHtmlTag($tag, $attributes = '') + { + return '<'.$tag.(empty($attributes) ? '' : ' '.$attributes).($this->isSelfClosingTag($tag) ? '/>' : '>'); + } + + /** + * Return the HTML closing tag + * + * @access public + * @param string $tag Tag name + * @return string + */ + public function closeHtmlTag($tag) + { + return $this->isSelfClosingTag($tag) ? '' : '</'.$tag.'>'; + } + + /** + * Return true is the tag is self-closing + * + * @access public + * @param string $tag Tag name + * @return boolean + */ + public function isSelfClosingTag($tag) + { + return in_array($tag, array('br', 'img')); + } + + /** + * Check if a tag is on the whitelist + * + * @access public + * @param string $tag Tag name + * @return boolean + */ + public function isAllowedTag($tag) + { + return in_array($tag, $this->tag_whitelist); + } + + /** + * Detect if an image tag is a pixel tracker + * + * @access public + * @param string $tag Tag name + * @param array $attributes Tag attributes + * @return boolean + */ + public function isPixelTracker($tag, array $attributes) + { + return $tag === 'img' && + isset($attributes['height']) && isset($attributes['width']) && + $attributes['height'] == 1 && $attributes['width'] == 1; + } + + /** + * Remove empty tags + * + * @access public + * @param string $data Input data + * @return string + */ + public function removeEmptyTags($data) + { + return preg_replace('/<([^<\/>]*)>([\s]*?|(?R))<\/\1>/imsU', '', $data); + } + + /** + * Replace <br/><br/> by only one + * + * @access public + * @param string $data Input data + * @return string + */ + public function removeMultipleTags($data) + { + return preg_replace("/(<br\s*\/?>\s*)+/", "<br/>", $data); + } + + /** + * Set whitelisted tags adn attributes for each tag + * + * @access public + * @param array $values List of tags: ['video' => ['src', 'cover'], 'img' => ['src']] + * @return Tag + */ + public function setWhitelistedTags(array $values) + { + $this->tag_whitelist = $values ?: $this->tag_whitelist; + return $this; + } +} |