Простая проблема с кодировкой RSS - PullRequest
1 голос
/ 04 октября 2011

Рассмотрим следующий код PHP для получения новостей RSS на разрабатываемом мной сайте:

<?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, но RSS-канал не читается, если я не изменю кодировку браузера на utf-8.Кодировка по умолчанию в моем случае - кириллица, но я получаю нечитаемый фид.Будем весьма благодарны за любую помощь, чтобы этот RSS читался на кириллице (из Болгарии).

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Я только что проверил ваш код, и болгарские символы отображались нормально, когда я удалил метатег charset=windows-1251 и только что оставил UTF-8. Хотите попробовать и посмотреть, работает ли он?

Кроме того, вы можете изменить тег <html>, чтобы он отражал тот факт, что ваша страница на болгарском языке, например: <html xmlns="http://www.w3.org/1999/xhtml" lang="bg" xml:lang="bg">

Или, возможно, вам нужно заставить веб-сервер отправлять контент в формате UTF-8, отправив заголовок Content-Type:

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

Обязательно включите это, прежде чем ЛЮБОЙ другой контент (даже пробел) будет отправлен в браузер. Если вы этого не сделаете, вы получите ошибку PHP «заголовки уже отправлены».

0 голосов
/ 05 октября 2011

Может быть, вам стоит взглянуть на htmlentities .

Это может преобразовать в HTML некоторые символы.

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