Код в ленте RSS - PullRequest
       16

Код в ленте RSS

0 голосов
/ 10 августа 2009

Я использую создатель канала (в частности, feed :: create () ) Коханы, за исключением того, что часть моего текста может быть такой в ​​элементе описания

См. Код ниже

<?php echo 'example'; ?>

Создатель ленты использует библиотеку SimpleXML. Всякий раз, когда данные возвращаются (используя $xml->asXml()), угловые скобки html внутри элемента описания преобразуются в объекты HTML.

Это позволяет правильно анализировать теги, полезно для тегов p и т.п. Однако в этом случае код PHP не будет отображаться (в окружении угловых скобок).

У меня вопрос - как я могу показать такие вещи в RSS-ленте? Как я могу отобразить &gt;, когда он сам анализируется как <? Имеет ли это смысл?

Вот пример того, что выводится:

<description>&lt;p&gt;some content&lt;/p&gt;&#13;

&lt;p&gt;WITH some code&lt;/p&gt;&lt;p&gt;&lt;?php&#13;
    //test me out!&#13;
?&gt;&lt;/p&gt;&#13;
</description>

( примечание , что не является ошибкой выше - все сущности преобразованы)

То, что я хотел бы отобразить (в программе чтения RSS), это

некоторый контент

С некоторым кодом

<?php
     //test me out! ?>

Ответы [ 2 ]

2 голосов
/ 11 августа 2009

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

htmlspecialchars( "<?php echo 'example'; ?>" )

Это приведет к тому, что ваш канал будет выглядеть еще более искаженным, чем он уже делает, потому что PHP будет закодирован дважды, один раз для RSS XML и снова для HTML, содержащегося в RSS XML.

0 голосов
/ 11 августа 2009

Все тэги RSS содержат строки, так что вы не можете просто выполнить PHP-манипуляции до установки тэга?

Так что вместо того, чтобы сказать:

$xml->description = 'Description <?php echo $var; ?>';

вы должны делать:

$xml->description = 'Description ' . $var;

По какой причине вы хотите передать PHP-код в ваш RSS-канал? Я предполагаю, что многие читатели каналов не будут выполнять его в любом случае.

...