rss reader - encoding?
rss reader - encoding?
hallo!
hab hier ein problem und zwar - ich verwende den feed http://www.microsoft.com/germany/msdn/rss/aktuell.xml welcher utf8 sein sollte laut firefox - wenn ich den nun anzeigen lasse mittels rss_template.html sind die umlaute kaputt - was mach ich falsch?
danke!
hab hier ein problem und zwar - ich verwende den feed http://www.microsoft.com/germany/msdn/rss/aktuell.xml welcher utf8 sein sollte laut firefox - wenn ich den nun anzeigen lasse mittels rss_template.html sind die umlaute kaputt - was mach ich falsch?
danke!
ist ne intressante frage...
welche encoding hat denn deine website ?
welche encoding hat denn deine website ?
*** make your own tools (wishlist :: thx)
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Insert RSS feed
* Authors: : Timo Hummel, Andreas Lindner
* Copyright : Contenido - four for business
* Created : 30.09.2005
************************************************/
cInclude("pear", "XML/Parser.php");
cInclude("pear", "XML/RSS.php");
if ("CMS_VALUE[0]" == "")
{
$sFeed = "http://www.contenido.org/rss/de/news";
} else {
$sFeed = "CMS_VALUE[0]";
}
if ("CMS_VALUE[2]" == "")
{
$FeedMaxItems = 999;
} else {
$FeedMaxItems = intval("CMS_VALUE[2]");
}
/* Preparse feed for an encoding due to the poorly designed
PHP XML parser */
$sFeedContent = substr(@file_get_contents($sFeed),0,1024);
$sFeedContent = utf8_decode($sFeedContent);
$regExp = "/<\?xml.*encoding=[\"\'](.*)[\"\']\?>/i";
preg_match($regExp,trim($sFeedContent),$matches);
if ($matches[1])
{
$rss =& new XML_RSS($sFeed, $matches[1]);
} else {
$rss =& new XML_RSS($sFeed);
}
$rss->parse();
$tpl = new Template;
$i = 0;
foreach ($rss->getItems() as $item)
{
if ($i < $FeedMaxItems) {
$tpl->set("d", "TITLE", htmlentities($item['title'],ENT_QUOTES));
$tpl->set("d", "LINK", htmlentities($item['link'],ENT_QUOTES));
$tpl->set("d", "DESCRIPTION", utf8_decode(htmlentities($item['description'],ENT_QUOTES)));
$tpl->set("d", "READ_ON", mi18n("weiterlesen"));
$tpl->next();
}
$i++;
}
$tpl->generate($cfgClient[$client]["path"]["frontend"]."templates/"."CMS_VALUE[1]");
?>
-
- Beiträge: 298
- Registriert: Di 16. Nov 2004, 15:43
- Wohnort: Arnstadt / Thüringen
- Kontaktdaten:
Poste doch mal bitte die RSS.PHP (XML_RSS-Klasse)
Das hier gibt mir zu denken:
Das hier gibt mir zu denken:
Code: Alles auswählen
$regExp = "/<\?xml.*encoding=[\"\'](.*)[\"\']\?>/i";
preg_match($regExp,trim($sFeedContent),$matches);
if ($matches[1])
{
$rss =& new XML_RSS($sFeed, $matches[1]);
} else {
$rss =& new XML_RSS($sFeed);
}
Code: Alles auswählen
<?php
// vim: set expandtab tabstop=4 shiftwidth=4 fdm=marker:
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2003 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Martin Jansen <mj@php.net> |
// | |
// +----------------------------------------------------------------------+
//
// $Id$
//
cInclude("pear", "XML/Parser.php");
/**
* RSS parser class.
*
* This class is a parser for Resource Description Framework (RDF) Site
* Summary (RSS) documents. For more information on RSS see the
* website of the RSS working group (http://www.purl.org/rss/).
*
* @author Martin Jansen <mj@php.net>
* @version $Revision$
* @access public
*/
class XML_RSS extends XML_Parser
{
// {{{ properties
/**
* @var string
*/
var $insideTag = '';
/**
* @var string
*/
var $activeTag = '';
/**
* @var array
*/
var $channel = array();
/**
* @var array
*/
var $items = array();
/**
* @var array
*/
var $item = array();
/**
* @var array
*/
var $image = array();
/**
* @var array
*/
var $textinput = array();
/**
* @var array
*/
var $textinputs = array();
/**
* @var array
*/
var $parentTags = array('CHANNEL', 'ITEM', 'IMAGE', 'TEXTINPUT');
/**
* @var array
*/
var $channelTags = array('TITLE', 'LINK', 'DESCRIPTION', 'IMAGE',
'ITEMS', 'TEXTINPUT');
/**
* @var array
*/
var $itemTags = array('TITLE', 'LINK', 'DESCRIPTION', 'PUBDATE');
/**
* @var array
*/
var $imageTags = array('TITLE', 'URL', 'LINK');
var $textinputTags = array('TITLE', 'DESCRIPTION', 'NAME', 'LINK');
/**
* List of allowed module tags
*
* Currently Dublin Core Metadata and the blogChannel RSS module
* are supported.
*
* @var array
*/
var $moduleTags = array('DC:TITLE', 'DC:CREATOR', 'DC:SUBJECT', 'DC:DESCRIPTION',
'DC:PUBLISHER', 'DC:CONTRIBUTOR', 'DC:DATE', 'DC:TYPE',
'DC:FORMAT', 'DC:IDENTIFIER', 'DC:SOURCE', 'DC:LANGUAGE',
'DC:RELATION', 'DC:COVERAGE', 'DC:RIGHTS',
'BLOGCHANNEL:BLOGROLL', 'BLOGCHANNEL:MYSUBSCRIPTIONS',
'BLOGCHANNEL:MYSUBSCRIPTIONS', 'BLOGCHANNEL:CHANGES');
// }}}
// {{{ Constructor
/**
* Constructor
*
* @access public
* @param mixed File pointer or name of the RDF file.
* @return void
*/
function XML_RSS($handle = '', $encoding = false)
{
if ($encoding !== false)
{
$this->XML_Parser($encoding);
} else {
$this->XML_Parser();
}
if (@is_resource($handle)) {
$this->setInput($handle);
} elseif ($handle != '') {
$this->setInputFile($handle);
} else {
$this->raiseError('No filename passed.');
}
}
// }}}
// {{{ startHandler()
/**
* Start element handler for XML parser
*
* @access private
* @param object XML parser object
* @param string XML element
* @param array Attributes of XML tag
* @return void
*/
function startHandler($parser, $element, $attribs)
{
switch ($element) {
case 'CHANNEL':
case 'ITEM':
case 'IMAGE':
case 'TEXTINPUT':
$this->insideTag = $element;
break;
default:
$this->activeTag = $element;
}
}
// }}}
// {{{ endHandler()
/**
* End element handler for XML parser
*
* If the end of <item>, <channel>, <image> or <textinput>
* is reached, this function updates the structure array
* $this->struct[] and adds the field "type" to this array,
* that defines the type of the current field.
*
* @access private
* @param object XML parser object
* @param string
* @return void
*/
function endHandler($parser, $element)
{
if ($element == $this->insideTag) {
$this->insideTag = '';
$this->struct[] = array_merge(array('type' => strtolower($element)),
$this->last);
}
if ($element == 'ITEM') {
$this->items[] = $this->item;
$this->item = '';
}
if ($element == 'IMAGE') {
$this->images[] = $this->image;
$this->image = '';
}
if ($element == 'TEXTINPUT') {
$this->textinputs = $this->textinput;
$this->textinput = '';
}
$this->activeTag = '';
}
// }}}
// {{{ cdataHandler()
/**
* Handler for character data
*
* @access private
* @param object XML parser object
* @param string CDATA
* @return void
*/
function cdataHandler($parser, $cdata)
{
if (in_array($this->insideTag, $this->parentTags)) {
$tagName = strtolower($this->insideTag);
$var = $this->{$tagName . 'Tags'};
if (in_array($this->activeTag, $var) ||
in_array($this->activeTag, $this->moduleTags)) {
$this->_add($tagName, strtolower($this->activeTag),
$cdata);
}
}
}
// }}}
// {{{ defaultHandler()
/**
* Default handler for XML parser
*
* @access private
* @param object XML parser object
* @param string CDATA
* @return void
*/
function defaultHandler($parser, $cdata)
{
return;
}
// }}}
// {{{ _add()
/**
* Add element to internal result sets
*
* @access private
* @param string Name of the result set
* @param string Fieldname
* @param string Value
* @return void
* @see cdataHandler
*/
function _add($type, $field, $value)
{
if (empty($this->{$type}) || empty($this->{$type}[$field])) {
$this->{$type}[$field] = $value;
} else {
$this->{$type}[$field] .= $value;
}
$this->last = $this->{$type};
}
// }}}
// {{{ getStructure()
/**
* Get complete structure of RSS file
*
* @access public
* @return array
*/
function getStructure()
{
return (array)$this->struct;
}
// }}}
// {{{ getchannelInfo()
/**
* Get general information about current channel
*
* This function returns an array containing the information
* that has been extracted from the <channel>-tag while parsing
* the RSS file.
*
* @access public
* @return array
*/
function getChannelInfo()
{
return (array)$this->channel;
}
// }}}
// {{{ getItems()
/**
* Get items from RSS file
*
* This function returns an array containing the set of items
* that are provided by the RSS file.
*
* @access public
* @return array
*/
function getItems()
{
return (array)$this->items;
}
// }}}
// {{{ getImages()
/**
* Get images from RSS file
*
* This function returns an array containing the set of images
* that are provided by the RSS file.
*
* @access public
* @return array
*/
function getImages()
{
return (array)$this->images;
}
// }}}
// {{{ getTextinputs()
/**
* Get text input fields from RSS file
*
* @access public
* @return array
*/
function getTextinputs()
{
return (array)$this->textinputs;
}
// }}}
}
?>
-
- Beiträge: 298
- Registriert: Di 16. Nov 2004, 15:43
- Wohnort: Arnstadt / Thüringen
- Kontaktdaten:
Ersetze mal testhalber diesen Code
mit diesem
Code: Alles auswählen
$regExp = "/<\?xml.*encoding=[\"\'](.*)[\"\']\?>/i";
preg_match($regExp,trim($sFeedContent),$matches);
if ($matches[1])
{
$rss =& new XML_RSS($sFeed, $matches[1]);
} else {
$rss =& new XML_RSS($sFeed);
}
Code: Alles auswählen
$rss =& new XML_RSS($sFeed, "UTF-8");
-
- Beiträge: 298
- Registriert: Di 16. Nov 2004, 15:43
- Wohnort: Arnstadt / Thüringen
- Kontaktdaten:
Sehr merkwürdig... probiere Spassenshalber mal
Und poste mal bitte was anstatt der Umlaute bei Dir herauskommt !
Gruss,
Christian
Code: Alles auswählen
$rss =& new XML_RSS($sFeed, "ISO-8859-1");
Gruss,
Christian