diff options
Diffstat (limited to 'includes/classes/FeedHtmlField.php')
| -rwxr-xr-x | includes/classes/FeedHtmlField.php | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/includes/classes/FeedHtmlField.php b/includes/classes/FeedHtmlField.php new file mode 100755 index 0000000..a5b37cb --- /dev/null +++ b/includes/classes/FeedHtmlField.php @@ -0,0 +1,70 @@ +<?php +namespace Bitweaver\Rss; + +/** + * @package rss + * An FeedHtmlField describes and generates + * a feed, item or image html field (probably a description). Output is + * generated based on $truncSize, $syndicateHtml properties. + * @author Pascal Van Hecke <feedcreator.class.php@vanhecke.info> + * @version 1.6 + */ +class FeedHtmlField { + /** + * Mandatory attributes of a FeedHtmlField. + */ + public $rawFieldContent; + + /** + * Optional attributes of a FeedHtmlField. + * + */ + public $truncSize; + public $syndicateHtml; + + /** + * Creates a new instance of FeedHtmlField. + * @param $string: if given, sets the rawFieldContent property + */ + public function __construct($parFieldContent) { + if ($parFieldContent) { + $this->rawFieldContent = $parFieldContent; + } + } + + /** + * Creates the right output, depending on $truncSize, $syndicateHtml properties. + * @return string the formatted field + */ + public function output() { + // when field available and syndicated in html we assume + // - valid html in $rawFieldContent and we enclose in CDATA tags + // - no truncation (truncating risks producing invalid html) + if (!$this->rawFieldContent) { + $result = ""; + } elseif ($this->syndicateHtml) { + // Clean HTML before wrapping in CDATA + $cleaned = $this->sanitizeHtml( $this->rawFieldContent ); + $result = "<![CDATA[$cleaned]]>"; + } else { + $result = ( $this->truncSize and is_int( $this->truncSize ) ) ? FeedCreator::iTrunc( htmlspecialchars( $this->rawFieldContent ), $this->truncSize ) : htmlspecialchars( $this->rawFieldContent ); + } + return $result; + } + + /** + * Sanitize HTML for RSS syndication - keep content, strip Bootstrap wrappers + */ + private function sanitizeHtml( $html ) { + // Remove Bootstrap wrapper divs + $html = preg_replace( '/<div[^>]*class="(container|row|col-[^"]*)"[^>]*>/', '', $html ); + $html = preg_replace( '/<\/div>/', '', $html ); + + // Keep formatting, images, links; strip everything else + return preg_replace( + '/\s+/', + ' ', + strip_tags( $html, '<p><br><img><strong><em><a><blockquote><ul><ol><li>' ) + ); + } +} |
