Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Автозамена " на двойные кавычки

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: При анализе XML-документа происходит нежелательная замена сущности "
AlexSport
Отправлено: 04 Декабря, 2011 - 22:15:29
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Дек. 2011  


Помог: 0 раз(а)




Добрый день!

Написал скрипт по слиянию нескольких RSS каналов. Привожу полный код (может кому пригодиться):
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         $number_item = 5;
  3.         $rss_files[] = 'rss.xml';
  4.         $rss_files[] = 'news.xml';
  5.         $rss_files[] = 'sport.xml';
  6.         $rss_files[] = 'articles.xml';
  7.        
  8.         $rss_files[] = 'mix_all_rss.xml'; // Всегда должен быть последним
  9.        
  10.         $newxml_head = '<?xml version="1.0" encoding="Windows-1251"?>
  11. <rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" version="2.0">
  12.         <channel xmlns:cfi="http://www.microsoft.com/schemas/rss/core/2005/internal" cfi:lastdownloaderror="None">
  13.                 <title cf:type="text">Статьи моего сайта</title>
  14.                 <link>http://мой_сайт</link>
  15.                 <description cf:type="text">Новые статьи Моего сайта</description>
  16.                 <copyright>Copyright 2010 Мой сайт</copyright>
  17.                 <language>ru-ru</language>
  18.  
  19.                 <image>
  20.                         <url>мой_сайт/images/banner-100.gif</url>
  21.                         <title>Мой сайт</title>
  22.                         <link>http://мой_сайт</link>
  23.                         <description>мой_сайт</description>
  24.                 </image>
  25. ';
  26.  
  27.     $newxml_middle = '
  28.         <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  29.    <atom:link href="http://мой_сайт/rss/mix_all_rss.xml" rel="self" type="application/rss+xml"/>
  30. ';
  31.         $newxml_end = '
  32.      </channel>
  33. </rss>';
  34.  
  35.        
  36.         $items = array();      
  37.         foreach ( $rss_files as $key=>$file_name )
  38.         {
  39.                 $domdocument[$key] = new domDocument ( '1.0', 'Windows-1251');
  40.                 $domdocument[$key]->preserveWhiteSpace = false;
  41.                 $domdocument[$key]->load( $file_name );
  42.                 $channel[$key] = $domdocument[$key]->documentElement->firstChild;
  43.                 $channel_items[$key] = $channel[$key]->getElementsByTagName( 'item' );
  44.                 $lastpubdate[$key] = strtotime( $channel_items[$key]->item(0)->getElementsByTagName( 'pubDate' )->item(0)->nodeValue );
  45.         }
  46.         $time_mix_file = array_pop( $lastpubdate );
  47.         sort( $lastpubdate );
  48.         $time_last_pub = array_pop( $lastpubdate );
  49.        
  50.         $mix_file_domdocument = array_pop( $domdocument );
  51.         $mix_file_items = array_pop( $channel_items );
  52.         if ( $time_mix_file >= $time_last_pub )
  53.         {
  54.                 $mix_file_domdocument->encoding = 'Windows-1251';
  55.                 $mix_file_domdocument->formatOutput = true;
  56.             echo $mix_file_domdocument->saveXML();
  57.         }
  58.         else
  59.         {
  60.                 foreach ( $domdocument as $key=>$domdoc )
  61.                 {
  62.                         $domdocument[$key]->encoding = 'Windows-1251';
  63.                         $domdocument[$key]->formatOutput = true;
  64.                         for ($i=0; $i<$number_item; $i++)
  65.                         {
  66.                                 $date = strtotime( $channel_items[$key]->item($i)->getElementsByTagName( 'pubDate' )->item(0)->nodeValue );
  67.                                 $items[$date] = iconv( 'UTF-8', 'Windows-1251', $domdocument[$key]->saveXML( $channel_items[$key]->item($i) ) );
  68.                                
  69.                         }
  70.                        
  71.                 }
  72.                 krsort( $items );
  73.                 reset( $items );
  74.                
  75.                 $newxml = $newxml_head . "\t\t<lastBuildDate>" . date( r, key( $items ) ) . '</lastBuildDate>' . $newxml_middle .
  76.                         implode( "\n", $items ) . $newxml_end;
  77.        
  78.        
  79.                 $xmlopen = fopen( array_pop( $rss_files ), "wt" );
  80.                 fwrite( $xmlopen, $newxml ) or die( "Ошибка записи в файл!" );
  81.                 fclose( $xmlopen );
  82.                 echo $newxml;
  83.  
  84.        
  85.         }
  86. ?>


Однако возникла следующая проблема. Если в исходных файлах, из которых происходит выборка, присутствует мнемоника (HTML-сущность) &quot;, например внутри контейнера <description>, то в результирующем файле mix_all_rss.xml на его месте стоит " (двойная кавычка), что является критической ошибкой для RSS-канала.

Подскажите пожалуйста, в каком месте анализа происходит эта замена и как ее предотвратить?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« XML и его обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB