简单的RSS编码问题

时间:2011-10-04 19:54:58

标签: php html encoding rss

考虑以下用于在我正在开发的网站上获取RSS新闻的PHP代码:

<?php
$url = "http://dariknews.bg/rss.php";
$xml = simplexml_load_file($url);

$feed_title = $xml->channel->title;
$feed_description = $xml->channel->description;
$feed_link = $xml->channel->link;
$item = $xml->channel->item;

    function getTheData($item){
        for ($i = 0; $i < 4; $i++) {
        $article_title = $item[$i]->title;
        $article_description = $item[$i]->description;
        $article_link = $item[$i]->link;
        echo "<p><h3><a href=".$article_link.">". $article_title. "</a></h3></p><small>".$article_description."</small><p>";
        }
    }
?>

此功能累积的数据应以下列HTML格式显示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>Новини от Дарик</title>
  </head>
   <body>
    <?php getTheData($item);?>
   </body>
</html>

如您所见,我添加了windows-1251(西里尔文)和utf-8编码,但如果我不将浏览器编码更改为utf-8,则RSS源无法读取。在我的情况下默认编码是cyrilic但我得到不可读的feed。任何帮助使这个RSS可读的cyrilic(来自保加利亚)将非常感谢。

2 个答案:

答案 0 :(得分:1)

我刚刚测试了您的代码,当我删除charset=windows-1251元标记并且刚刚离开UTF-8时,保加利亚字符显示正常。想尝试一下,看看它是否有效?

此外,您可能希望更改<html>代码,以反映您的网页是保加利亚语的事实:<html xmlns="http://www.w3.org/1999/xhtml" lang="bg" xml:lang="bg">

或者您可能需要强制Web服务器通过发送Content-Type标头将内容作为UTF-8发送:

<?php
header("Content-Type: text/html; charset=UTF-8");
?>

在将任何其他内容(甚至空白)发送到浏览器之前,请确保包含此内容。如果你不这样做,你将得到PHP“标题已发送”错误。

答案 1 :(得分:0)

也许你应该看看htmlentities

这可以将某些字符转换为html。

$titleEncoded = htmlentities($article_title,ENT_XHTML,cp1251);