RSS-канал не проверяется из-за подрезки HTML-символов - PullRequest
0 голосов
/ 01 марта 2011

В настоящее время не удается получить мой RSS-канал для проверки с помощью W3C RSS Validator .Кажется, есть проблема со временем / датой.Если вы нажмете ссылку W3C, она покажет ошибки.Когда я закомментирую дату, она работает нормально, но дата очень важна !!

Вот оригинальный сценарий:

  include "db.php";

  header("Expires: 0");
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  header("cache-control: no-store, no-cache, must-revalidate");
  header("Pragma: no-cache");
  header("Content-type: text/xml");
  print "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";

?>
<rss version="2.0">
  <channel>
    <title>MediWales Events</title>
    <description>The latest Events, updates and announcements from MediWales.</description>
    <link>http://www.mediwales.com</link>
    <copyright>Copyright 2011 MediWales.</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <language>en-us</language>
    <lastBuildDate><? print date("D, d M Y H:i:s"); ?> 0000</lastBuildDate>
    <managingEditor>info@mediwales.com</managingEditor>
    <pubDate><? print date("D, d M Y H:i:s"); ?> 0000</pubDate>

    <webMaster>info@mediwales.com</webMaster>
    <generator>codeworks rss script (1.0.0)</generator>
    <image>
      <url>http://mediwales.com/login/uploaded/template/logo.png</url>
      <title>MediWales Website</title>
      <link>http://www.mediwales.com</link>
      <description>The latest Events, updates and announcements from MediWales.</description>
      <width>144</width>
      <height>52</height>
    </image>


  <?

      $latestnews = mysql_query("SELECT myevents.*, myevents_dates.datefrom from myevents, myevents_dates WHERE myevents_dates.datefrom >= CURDATE() AND myevents.id = myevents_dates.eventid order by myevents_dates.datefrom");
          while ($news = mysql_fetch_assoc($latestnews)) {

              $datetime = explode(" ",$news[datefrom]);
              $date = explode("-",$datetime[0]);
              $time = explode(":",$datetime[1]);
              $news[description] = strip_tags($news[description]);
              $news[description] = htmlspecialchars($news[description]);

              echo "<item>";
              echo "<title>".mb_convert_encoding(htmlspecialchars($news[title]),"US-ASCII")."</title>";
              echo "<description>".mb_convert_encoding(substr($news[description],0, 250),"US-ASCII")."</description>";
              echo "<link>http://www.mediwales.com/index.php?id=4&amp;nid=$news[id]</link>";
              echo "<pubDate>".date('D, d M Y H:i:s O', mktime($time[0],$time[1],$time[2],$date[1],$date[2],$date[0]))."</pubDate>";
              echo "</item>";


          }

  ?>
  </channel>  
</rss>

Ответы [ 4 ]

2 голосов
/ 01 марта 2011

Обратите внимание, что единственная ошибка в строке 56:

nbsp;&</description>

должно быть:

nbsp;&amp;</description>

Проблема в том, что вы вызываете htmlspecialchars, а затем substr, поэтому последний & усекается до &, и это делает ваш фид недействительным. Вызовите substr first и htmlspecialchars last, чтобы это исправить.

Остальные вещи («в адресе электронной почты отсутствует реальное имя», «элемент должен содержать элемент guid») - это просто рекомендации: вы должны следовать им, потому что это хорошие идеи, но они приводят к тому, что канал провалит проверку.

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

Я временно решил проблему, удалив некоторые html-символы на моем реальном веб-сайте, чтобы фид не захватывал их.

Я знаю, что проблема может возникнуть, когда мы получаем следующий набор каналов, но слишком спешим, чтобы исправить в данный момент.

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

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

Если так, то это не imho, причина объявить ваш фид недействительным. Реальные публикации часто имеют даты публикации в будущем.

Спецификация, которая является фактическим авторитетом в этом, не говорит, что в будущем нет ничего плохого в публикации.

http://cyber.law.harvard.edu/rss/rss.html

У валидаторов тоже могут быть ошибки. : -)

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

Есть ряд других ошибок, которые вам нужно исправить (например, обрезка в середине сущности HTML).Но они предоставляют ссылку справки для каждого из них.

Если вы перейдете по ссылке на справку по конкретной ссылке на ошибку даты, вы увидите, что одной из возможных причин этого предупреждения является то, что датабудущее.Дата, на которую они жалуются, - «Невероятная дата: понедельник, 07 марта 2011 г. 00:00:00 +0000».Сегодня 1 марта 2011 года, поэтому 7 марта 2011 года действительно впереди.

Если вы продолжите читать их Справочную ссылку , они объяснят, почему это проблема.Исправление не должно включать будущие даты в ваш канал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...