Вопрос

У меня проблема с rss-каналом.

Когда я делаю <title>This is a title </title>

Заголовок красиво отображается в ленте

Но когда я делаю ddo $title = "это тильт";

<title><![CDATA['$title']]></title>

Заголовок вообще не появляется.


Это все еще не работает.Я генерирую свой rss-канал динамично, и он выглядит примерно так:

$item_template="
      <item>
         <title>[[title]]</title>
         <link>[[link]]</link>
         <description><![CDATA[[[description]]]]></description>
         <pubDate>[[date]]</pubDate>
      </item>
      ";

и в цикле:

$s.=str_replace(
array("[[title]]","[[link]]","[[description]]","[[date]]"),
array(htmlentities($row["title"]),$url,$description,$date),
$item_template);

Проблема, в частности, в том, что в названии есть знак евро.Затем он отображается в моем rss-валидаторе следующим образом:

Â\x80

Более подробная информация:

Хорошо, я боролся с этим в течение последних нескольких дней, и я не могу найти решение.Так что я начну розыгрыш награды.Вот более подробная информация:

  • Информация, которая попадает в ленту, хранится в базе данных latin 1 (которой я администрирую).
  • Проблема возникает, когда в базе данных есть знак евро.Независимо от того, нравится ли это € или &euro;
  • Знак евро иногда выглядит как странные символы или как Â \ x80
  • Я пытаюсь решить проблему на стороне канала, а не на стороне читателя.
  • Полный код можно найти здесь: codedump кодовый дамп
  • Далее:иногда, когда знак евро не может быть проанализирован, элемент (либо заголовок, либо описание) отображается пустым.Итак, если вы заглянете в исходный код при показе ленты в браузере, вы найдете <title></title>

Если вам нужна дополнительная информация, пожалуйста, спрашивайте.

Это было полезно?

Решение

Проблема в вашем выводимом коде;изменение

echo '<title><![CDATA[$title]]></title>';

Для

echo '<title><![CDATA[' . $title . ']]></title>';

В качестве дополнительного примечания, пожалуйста, обратите внимание на следующее:Не отвечайте на свой собственный вопрос с последующим дополнением, а отредактируйте исходный.Не используйте регулярные выражения без уважительной причины.Не надо гадать.

Вместо этого сделайте то, что вы должны были делать с самого начала:Оберните заголовок в htmlentitites и будет сделано, как в:

echo '<title>' . htmlentities($title, ENT_NOQUOTES, [encoding]) . '</title>';

Заменить [encoding] с той кодировкой символов, которую вы используете. Скорее всего, это 'UTF-8'.Это необходимо, потому что php(<6) по умолчанию используется ISO-8859-1, и нет способа выразить, напримерзнак евро в этой кодировке.Для получения дополнительной информации, пожалуйста, обратитесь к этому хорошо написанное введение.

Я также предлагаю вам читайте о XML.Начните со второй главы.

Другие советы

Использование htmlspecialchars() вместо того , чтобы htmlentities().

Каналы RSS /ATOM не являются HTML, поэтому вы не можете использовать в них HTML-объекты. XML содержит только пять объектов, определенных по умолчанию, так что вы не можете использовать &euro;.Поскольку вы используете UTF — используйте буквальный знак евро, без преобразования (нет htmlentities), но с экранированием других чувствительных символов (htmlspecialchars).

И это было бы полностью допустимым RSS / XML.Если это не решает проблему, это означает, что она лежит где-то в другом месте (пожалуйста, предоставьте мне сгенерированный исходный код RSS для получения дополнительной помощи).

Какой язык программирования или среду вы используете?Например, в PHP одинарные кавычки препятствуют вычислению переменных внутри.

В противном случае, в данном случае вам на самом деле не нужны эти цитаты.Возможно, вас смутил синтаксис массива в PHP.

Так что вам лучше написать:

<title><![CDATA[$title]]></title>

Я не понимаю, почему вы должны использовать функцию кодирования.Когда третья сторона возьмет ваш контент, вы не будете иметь ни малейшего представления о том, как расшифровать эту строку.Я думаю, что - вам следует использовать CDATA для тегов, которые могут нарушать работу с XML - используйте четко определенные библиотеки для записи XML.Для PHP:DOMDocument или средство записи XML (http://php.net/manual/en/book.xmlwriter.php)

Я считаю, что профиль RSS не позволяет этого: это в документе говорится, что title удерживает символьные данные, которые дополнительно определяются следующим образом.

Эта статья может быть полезно получить информацию о знаке евро и поддержке в различных контекстах.Некоторые из предложений из этой статьи включают использование &#8364; или &euro; или просто замените знак словом "евро". Удачи!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top