Php 简单的RSS编码问题

Php 简单的RSS编码问题,php,html,encoding,rss,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; $it

考虑以下在我正在开发的站点上获取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>";
        }
    }
?>
频道->标题;
$feed_description=$xml->channel->description;
$feed_link=$xml->channel->link;
$item=$xml->channel->item;
函数getTheData($item){
对于($i=0;$i<4;$i++){
$article_title=$item[$i]->title;
$article_description=$item[$i]->description;
$article_link=$item[$i]->link;
回声“

”$article_description.“”; } } ?>
此函数累积的数据应以以下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提要将无法读取。在我的例子中,默认的编码是西里尔语,但是我得到了无法读取的提要。如果您能用西里尔语(保加利亚语)阅读此RSS,我们将不胜感激。

也许您应该看看

这可以将一些字符转换为html

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

我刚刚测试了您的代码,当我删除
charset=windows-1251
meta标记并保留UTF-8标记时,保加利亚字符显示良好。想试试看它是否有效吗

另外,您可能希望更改
标记,以反映您的页面是保加利亚语的,如下所示:

或者,您可能需要通过发送内容类型标头,强制web服务器以UTF-8的形式发送内容:

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


只需确保在将任何其他内容(甚至空白)发送到浏览器之前包含此内容。如果不这样做,则会出现PHP“headers ready sent”错误

我试过你说的,但仍然不起作用。我默认的浏览器编码是西里尔文-1251,在保加利亚是一样的。如果我将浏览器编码改为UTF-8,它就可以工作。这似乎表明您的PHP和RSS提要都很好,只需让浏览器将其显示为UTF-8即可。您的浏览器设置是否可能导致此问题?当我用windows-1251元标记在FireFox或Chrome中打开脚本时,页面无法读取,但是,当我删除该标记并保留UTF-8时,它会正确显示。我所在国家的每个浏览器都应该使用这种默认编码,而不是UTF-8,这会使事情变得困难。@George:可能Web服务器正在发送自己的内容类型标题,将页面设置为CP1251。尝试在PHP脚本中添加header()行,以强制它发送UTF-8内容类型头(我将用一个示例更新我的答案)。两者都可以。只要在将任何其他内容发送到浏览器之前调用header()函数即可。因此,它可以位于HTML文件的第一行,也可以位于PHP脚本中。我将您的PHP脚本放在PHP文件的顶部,HTML部分放在下面,并在结束PHP标记之前的最后一行添加了header函数,以此来测试这一点。问题是,有时候Web服务器有它自己的默认字符集设置,它发送到浏览器,而不管HTML元标记中设置了什么。我们试图通过在PHP中发送一个特定的字符集头来覆盖它。