Создание RSS-канала с использованием строк, содержащих HTML, приводит к тому, что Feed становится пустым - PullRequest
0 голосов
/ 17 ноября 2011

Извините, если об этом уже спрашивали - есть вопрос с похожим названием, но это не совсем то, что я ищу.

Что я делаю, так это извлекаю результаты из БД и распечатываю их внутри соответствующих тегов для создания RSS-канала.

Единственная проблема в том, что тело статьи содержит HTML-теги, поэтому мой RSS-канал загружается неправильно.

Пока я пробовал:

$rssfeed .= '<description>' . htmlentities($row['text') . '</description>';

и

$rssfeed .= '<description>' . htmlspecialchars($row['text'], ENT_COMPAT, 'UTF-8') . '</description>';

Использование любого из них просто дает мне совершенно чистый канал.

На самом деле я только что попробовал это и получил тот же результат:

$rssfeed .= '<description>' . $row['text']. '</description>';

Теперь я в замешательстве, так как наверняка это должно было сработать? Единственное, о чем я могу думать, это о том, что строка в базе данных слишком длинна для RSS-канала, поскольку она содержит полный текст статьи и HTML.

Я не был уверен, будет ли он автоматически обрезан или нет.

Есть идеи?

UPDATE

Это пример вывода:

<?xml version="1.0" encoding="UTF-8"?>
    <rss version="2.0">
        <channel>
            <title>RSS feed</title>
            <link>http://www.12345.co.uk</link>
            <description>RSS Feed from 12345.co.uk</description>
            <language>en-uk</language>
            <copyright>Copyright (C) 2011 12345.co.uk</copyright>
            <item>
                <title>Wear safe but stylish sunglasses on the slopes</title>
                <description><![CDATA["<p>Holidaymakers hitting the slopes this year must remember to pack a pair of sunglasses alongside their skis, one expert has highlighted.</p>
                <p>Dharmesh Patel, chairman of the Eyecare Trust, noted that UV protective eyewear is a must for skiers.</p>
                <p>Posted by xxxxx</p>v"]]>
                </description>
                <link></link>
                <pubDate>Mon, 03 Oct 2011 16:57:09 +0000</pubDate>
            </item>

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

Поскольку RSS является языком XML, вам нужно использовать раздел CDATA:

<description><![CDATA["<b>Use tags here</b>"]]></description>

В PHP вы можете легко заархивировать его (с помощью XMLWriter) с использованием startCData() и endCData() -метод.

Если XML-Reader правильно отображает ваш HTML, зависит от используемого им синтаксического анализатора.Однако использование escape-последовательностей допустимый XML .

1 голос
/ 17 ноября 2011

try strip_tags ($ row ['text']); http://php.net/manual/en/function.strip-tags.php

обновление (у меня все в порядке):

<?php echo '<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>RSS feed</title>
        <link>http://www.12345.co.uk</link>
        <description>RSS Feed from 12345.co.uk</description>
        <language>en-uk</language>
        <copyright>Copyright (C) 2011 12345.co.uk</copyright>
        <item>
            <title>Wear safe but stylish sunglasses on the slopes</title>
            <description><![CDATA["<p>Holidaymakers hitting the slopes this year must remember to pack a pair of sunglasses alongside their skis, one expert has highlighted.</p>
            <p>Dharmesh Patel, chairman of the Eyecare Trust, noted that UV protective eyewear is a must for skiers.</p>
            <p>Posted by xxxxx</p>v"]]>
            </description>
            <link></link>
            <pubDate>Mon, 03 Oct 2011 16:57:09 +0000</pubDate>
        </item>

Я не знаю почему, но он хочет показать код, заканчивающийся просто: </channel></rss>';?>

...