| 以下为引用的内容:<?php /**
 * rss操作类
 *
 * FeedCreator class v1.7.2
 * originally (c) Kai Blankenhorn
 * www.bitfolge.de
 * kaibbitfolge.de
 *
 */
 // your local timezone, set to "" to disable or for GMT
 define("TIME_ZONE","");
 /**
 * Version string.
 **/
 define("FEEDCREATOR_VERSION", "www.273.cn");
 /**
 * A FeedItem is a part of a FeedCreator feed.
 *
 * author Kai Blankenhorn <kaibbitfolge.de>
 * since 1.3
 */
 class FeedItem extends HtmlDescribable {
 /**
 * Mandatory attributes of an item.
 */
 var $title, $description, $link;
 
 /**
 * Optional attributes of an item.
 */
 var $author, $authorEmail, $image, $category, $comments, $guid, $source, $creator;
 
 /**
 * Publishing date of an item. May be in one of the following formats:
 *
 * RFC 822:
 * "Mon, 20 Jan 03 18:05:41 +0400"
 * "20 Jan 03 18:05:41 +0000"
 *
 * ISO 8601:
 * "2003-01-20T18:05:41+04:00"
 *
 * Unix:
 * 1043082341
 */
 var $date;
 
 /**
 * Any additional elements to include as an assiciated array. All $key => $value pairs
 * will be included unencoded in the feed item in the form
 *     <$key>$value</$key>
 * Again: No encoding will be used! This means you can invalidate or enhance the feed
 * if $value contains markup. This may be abused to embed tags not implemented by
 * the FeedCreator class used.
 */
 var $additionalElements = Array();
 // on hold
 // var $source;
 }
 
 /**
 * An FeedImage may be added to a FeedCreator feed.
 * author Kai Blankenhorn <kaibbitfolge.de>
 * since 1.3
 */
 class FeedImage extends HtmlDescribable {
 /**
 * Mandatory attributes of an image.
 */
 var $title, $url, $link;
 
 /**
 * Optional attributes of an image.
 */
 var $width, $height, $description;
 }
 
 /**
 * An HtmlDescribable is an item within a feed that can have a description that may
 * include HTML markup.
 */
 class HtmlDescribable {
 /**
 * Indicates whether the description field should be rendered in HTML.
 */
 var $descriptionHtmlSyndicated;
 
 /**
 * Indicates whether and to how many characters a description should be truncated.
 */
 var $descriptionTruncSize;
 
 /**
 * Returns a formatted description field, depending on descriptionHtmlSyndicated and
 * $descriptionTruncSize properties
 * return    string    the formatted description
 */
 function getDescription() {
 $descriptionField = new FeedHtmlField($this->description);
 $descriptionField->syndicateHtml = $this->descriptionHtmlSyndicated;
 $descriptionField->truncSize = $this->descriptionTruncSize;
 return $descriptionField->output();
 }
 }
 /*** 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.phpvanhecke.info>
 * version 1.6
 */
 class FeedHtmlField {
 /**
 * Mandatory attributes of a FeedHtmlField.
 */
 var $rawFieldContent;
 
 /**
 * Optional attributes of a FeedHtmlField.
 *
 */
 var $truncSize, $syndicateHtml;
 
 /**
 * Creates a new instance of FeedHtmlField.
 * param  $string: if given, sets the rawFieldContent property
 */
 function FeedHtmlField($parFieldContent) {
 if ($parFieldContent) {
 $this->rawFieldContent = $parFieldContent;
 }
 }
 
 /**
 * Creates the right output, depending on $truncSize, $syndicateHtml properties.
 * return string    the formatted field
 */
 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) {
 $result = "<![CDATA[".$this->rawFieldContent."]]>";
 } else {
 if ($this->truncSize and is_int($this->truncSize)) {
 $result = FeedCreator::iTrunc(htmlspecialchars($this->rawFieldContent),$this->truncSize);
 } else {
 $result = htmlspecialchars($this->rawFieldContent);
 }
 }
 return $result;
 }
 }
 /*** UniversalFeedCreator lets you choose during runtime which
 * format to build.
 * For general usage of a feed class, see the FeedCreator class
 * below or the example above.
 *
 * since 1.3
 * author Kai Blankenhorn <kaibbitfolge.de>
 */
 class UniversalFeedCreator extends FeedCreator {
 var $_feed;
 
 function _setFormat($format) {
 switch (strtoupper($format)) {
 
 case "2.0":
 // fall through
 case "RSS2.0":
 $this->_feed = new RSSCreator20();
 break;
 
 case "0.91":
 // fall through
 case "RSS0.91":
 $this->_feed = new RSSCreator091();
 break;
 
 default:
 $this->_feed = new RSSCreator091();
 break;
 }
 
 $vars = get_object_vars($this);
 foreach ($vars as $key => $value) {
 // prevent overwriting of properties "contentType", "encoding"; do not copy "_feed" itself
 if (!in_array($key, array("_feed", "contentType", "encoding"))) {
 $this->_feed->{$key} = $this->{$key};
 }
 }
 }
 
 /**
 * Creates a syndication feed based on the items previously added.
 *
 * see        FeedCreator::addItem()
 * param    string    format    format the feed should comply to. Valid values are:
 *   "PIE0.1", "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3", "HTML", "JS"
 * return    string    the contents of the feed.
 */
 function createFeed($format = "RSS0.91") {
 $this->_setFormat($format);
 return $this->_feed->createFeed();
 }
 
 
 /**
 * Saves this feed as a file on the local disk. After the file is saved, an HTTP redirect
 * header may be sent to redirect the use to the newly created file.
 * since 1.4
 *
 * param string format format the feed should comply to. Valid values are:
 *   "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM", "ATOM0.3", "HTML", "JS"
 * param string filename optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
 * param boolean displayContents optional send the content of the file or not. If true, the file will be sent in the body of the response.
 */
 function saveFeed($format="RSS0.91", $filename="", $displayContents=true) {
 $this->_setFormat($format);
 $this->_feed->saveFeed($filename, $displayContents);
 }
    /*** Turns on caching and checks if there is a recent version of this feed in the cache.
 * If there is, an HTTP redirect header is sent.
 * To effectively use caching, you should create the FeedCreator object and call this method
 * before anything else, especially before you do the time consuming task to build the feed
 * (web fetching, for example).
 *
 * param   string   format   format the feed should comply to. Valid values are:
 *       "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3".
 * param filename   string   optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
 * param timeout int      optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)
 */
 function useCached($format="RSS0.91", $filename="", $timeout=3600) {
 $this->_setFormat($format);
 $this->_feed->useCached($filename, $timeout);
 }
 }
 /*** FeedCreator is the abstract base implementation for concrete
 * implementations that implement a specific format of syndication.
 *
 * abstract
 * author Kai Blankenhorn <kaibbitfolge.de>
 * since 1.4
 */
 class FeedCreator extends HtmlDescribable {
 /**
 * Mandatory attributes of a feed.
 */
 var $title, $description, $link;
 
 
 /**
 * Optional attributes of a feed.
 */
 var $syndicationURL, $image, $language, $copyright, $pubDate, $lastBuildDate, $editor, $editorEmail, $webmaster, $category, $docs, $ttl, $rating, $skipHours, $skipDays;
 /**
 * The url of the external xsl stylesheet used to format the naked rss feed.
 * Ignored in the output when empty.
 */
 var $xslStyleSheet = "";
 
 
 /**
 * access private
 */
 var $items = Array();
 
 
 /**
 * This feed's MIME content type.
 * since 1.4
 * access private
 */
 var $contentType = "application/xml";
 
 
 /**
 * This feed's character encoding.
 * since 1.6.1
 **/
 var $encoding = "utf-8";
 
 
 /**
 * Any additional elements to include as an assiciated array. All $key => $value pairs
 * will be included unencoded in the feed in the form
 *     <$key>$value</$key>
 * Again: No encoding will be used! This means you can invalidate or enhance the feed
 * if $value contains markup. This may be abused to embed tags not implemented by
 * the FeedCreator class used.
 */
 var $additionalElements = Array();
 
 
 /**
 * Adds an FeedItem to the feed.
 *
 * param object FeedItem $item The FeedItem to add to the feed.
 * access public
 */
 function addItem($item) {
 $this->items[] = $item;
 }
 /**
 * 清空当前数组值
 *
 * param object FeedItem $item The FeedItem to add to the feed.
 * access public
 */
 function clearItem2Null() {
 $this->items = array();
 }
 
 /**
 * Truncates a string to a certain length at the most sensible point.
 * First, if there's a '.' character near the end of the string, the string is truncated after this character.
 * If there is no '.', the string is truncated after the last ' ' character.
 * If the string is truncated, " ..." is appended.
 * If the string is already shorter than $length, it is returned unchanged.
 *
 * static
 * param string    string A string to be truncated.
 * param int        length the maximum length the string should be truncated to
 * return string    the truncated string
 */
 function iTrunc($string, $length) {
 if (strlen($string)<=$length) {
 return $string;
 }
 
 $pos = strrpos($string,".");
 if ($pos>=$length-4) {
 $string = substr($string,0,$length-4);
 $pos = strrpos($string,".");
 }
 if ($pos>=$length*0.4) {
 return substr($string,0,$pos+1)." ...";
 }
 
 $pos = strrpos($string," ");
 if ($pos>=$length-4) {
 $string = substr($string,0,$length-4);
 $pos = strrpos($string," ");
 }
 if ($pos>=$length*0.4) {
 return substr($string,0,$pos)." ...";
 }
 
 return substr($string,0,$length-4)." ...";
 
 }
 
 
 /**
 * Creates a comment indicating the generator of this feed.
 * The format of this comment seems to be recognized by
 * Syndic8.com.
 */
 function _createGeneratorComment() {
 return "<!-- generator=\"".FEEDCREATOR_VERSION."\" -->\n";
 }
 
 
 /**
 * Creates a string containing all additional elements specified in
 * $additionalElements.
 * param elements array an associative array containing key => value pairs
 * param indentString string a string that will be inserted before every generated line
 * return    string    the XML tags corresponding to $additionalElements
 */
 function _createAdditionalElements($elements, $indentString="") {
 $ae = "";
 if (is_array($elements)) {
 foreach($elements AS $key => $value) {
 $ae.= $indentString."<$key>$value</$key>\n";
 }
 }
 return $ae;
 }
 
 function _createStylesheetReferences() {
 $xml = "";
 if ($this->cssStyleSheet) $xml .= "<?xml-stylesheet href=\"".$this->cssStyleSheet."\" _fcksavedurl="\"".$this->cssStyleSheet."\"" type=\"text/css\"?>\n";
 if ($this->xslStyleSheet) $xml .= "<?xml-stylesheet href=\"".$this->xslStyleSheet."\" type=\"text/xsl\"?>\n";
 return $xml;
 }
 
 
 /**
 * Builds the feed's text.
 * abstract
 * return    string    the feed's complete text
 */
 function createFeed() {
 }
 
 /**
 * Generate a filename for the feed cache file. The result will be $_SERVER["PHP_SELF"] with the extension changed to .xml.
 * For example:
 *
 * echo $_SERVER["PHP_SELF"]."\n";
 * echo FeedCreator::_generateFilename();
 *
 * would produce:
 *
 * /rss/latestnews.php
 * latestnews.xml
 *
 * return string the feed cache filename
 * since 1.4
 * access private
 */
 function _generateFilename() {
 $fileInfo = pathinfo($_SERVER["PHP_SELF"]);
 return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".xml";
 }
 |