Что не так с этим RSS-потоком php? - PullRequest
0 голосов
/ 05 марта 2011

Это код, который я использую:

<?php
include "global.php";

$query = "SELECT * FROM posts WHERE `approved`='1' ORDER BY time DESC";
$res = mysql_query($query) or die(mysql_error());

$xml_output = "<?xml version=\"1.0\"?>\n";
$xml_output .= "<rss version=\"2.0\">\n\n";
$xml_output .= "<channel>\n\n";

while($row = mysql_fetch_assoc($res)){
    $id = $row['id'];
    $title = $row['title'];
    $content = ShortenText($row['content'], 500);

    $xml_output .= "\t<item>\n";
    $xml_output .= "\t\t<title>" . $title . "</title>\n";
        $content = str_replace("&", "&", $content);
        $content = str_replace("<", "<", $content);
        $content = str_replace(">", "&gt;", $content);
        $content = str_replace("\"", "&quot;", $content);
    $xml_output .= "\t\t<description>" . $content . "</description>\n";
    $xml_output .= "\t\t<link>" . "http://projectstratos.com/post.php?id=" . $row['id'] . "</link>\n";
    $xml_output .= "\t</item>\n";
}

$xml_output .= "</channel>\n\n"; 
$xml_output .= "</rss>";

echo $xml_output;
?>

И это показывает пустую страницу RSS-ленты, почему это так?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2015

вы можете попробовать это решение, которое я реализовал сегодня RSS-канал PHP / MySQL оно должно быть полезным

0 голосов
/ 05 марта 2011

Проблема в том, что вы не правильно экранировали XML здесь:

$content = str_replace("&", "&", $content);
$content = str_replace("<", "<", $content);

Эти две строки на самом деле ничего не делают. Вы просто заменяете строку той же самой строкой. Вы имели в виду &amp; вместо & и &lt; вместо < для строк замены?

Лучший способ - использовать теги CDATA, но это все равно не будет корректно отображать все символы.

Еще лучше - используйте классы DOM , чтобы сгенерировать для вас XML, а не избегать его самостоятельно.

...