12 * obtain it through the world-wide-web, please send an email |
12 * obtain it through the world-wide-web, please send an email |
13 * to license@zend.com so we can send you a copy immediately. |
13 * to license@zend.com so we can send you a copy immediately. |
14 * |
14 * |
15 * @category Zend |
15 * @category Zend |
16 * @package Zend_Feed_Reader |
16 * @package Zend_Feed_Reader |
17 * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) |
17 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) |
18 * @license http://framework.zend.com/license/new-bsd New BSD License |
18 * @license http://framework.zend.com/license/new-bsd New BSD License |
19 * @version $Id: Reader.php 25275 2013-03-06 09:55:33Z frosch $ |
19 * @version $Id$ |
20 */ |
20 */ |
21 |
21 |
22 /** |
22 /** |
23 * @see Zend_Feed |
23 * @see Zend_Feed |
24 */ |
24 */ |
37 /** |
37 /** |
38 * @see Zend_Feed_Reader_FeedSet |
38 * @see Zend_Feed_Reader_FeedSet |
39 */ |
39 */ |
40 require_once 'Zend/Feed/Reader/FeedSet.php'; |
40 require_once 'Zend/Feed/Reader/FeedSet.php'; |
41 |
41 |
|
42 /** @see Zend_Xml_Security */ |
|
43 require_once 'Zend/Xml/Security.php'; |
|
44 |
|
45 /** @see Zend_Xml_Exception */ |
|
46 require_once 'Zend/Xml/Exception.php'; |
|
47 |
42 /** |
48 /** |
43 * @category Zend |
49 * @category Zend |
44 * @package Zend_Feed_Reader |
50 * @package Zend_Feed_Reader |
45 * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) |
51 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) |
46 * @license http://framework.zend.com/license/new-bsd New BSD License |
52 * @license http://framework.zend.com/license/new-bsd New BSD License |
47 */ |
53 */ |
48 class Zend_Feed_Reader |
54 class Zend_Feed_Reader |
49 { |
55 { |
50 /** |
56 /** |
324 |
330 |
325 return $reader; |
331 return $reader; |
326 } |
332 } |
327 |
333 |
328 /** |
334 /** |
329 * Import a feed froma string |
335 * Import a feed from a string |
330 * |
336 * |
331 * @param string $string |
337 * @param string $string |
332 * @return Zend_Feed_Reader_FeedInterface |
338 * @return Zend_Feed_Reader_FeedInterface |
333 */ |
339 */ |
334 public static function importString($string) |
340 public static function importString($string) |
335 { |
341 { |
336 $libxml_errflag = libxml_use_internal_errors(true); |
|
337 $oldValue = libxml_disable_entity_loader(true); |
|
338 $dom = new DOMDocument; |
342 $dom = new DOMDocument; |
339 $status = $dom->loadXML($string); |
343 try { |
340 foreach ($dom->childNodes as $child) { |
344 $dom = Zend_Xml_Security::scan($string, $dom); |
341 if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) { |
345 } catch (Zend_Xml_Exception $e) { |
342 require_once 'Zend/Feed/Exception.php'; |
346 require_once 'Zend/Feed/Exception.php'; |
343 throw new Zend_Feed_Exception( |
347 throw new Zend_Feed_Exception( |
344 'Invalid XML: Detected use of illegal DOCTYPE' |
348 $e->getMessage() |
345 ); |
349 ); |
346 } |
350 } |
347 } |
351 if (!$dom) { |
348 libxml_disable_entity_loader($oldValue); |
|
349 libxml_use_internal_errors($libxml_errflag); |
|
350 |
|
351 if (!$status) { |
|
352 // Build error message |
352 // Build error message |
353 $error = libxml_get_last_error(); |
353 $error = libxml_get_last_error(); |
354 if ($error && $error->message) { |
354 if ($error && $error->message) { |
355 $errormsg = "DOMDocument cannot parse XML: {$error->message}"; |
355 $errormsg = "DOMDocument cannot parse XML: {$error->message}"; |
356 } else { |
356 } else { |
453 $dom = $feed->getDomDocument(); |
453 $dom = $feed->getDomDocument(); |
454 } elseif($feed instanceof DOMDocument) { |
454 } elseif($feed instanceof DOMDocument) { |
455 $dom = $feed; |
455 $dom = $feed; |
456 } elseif(is_string($feed) && !empty($feed)) { |
456 } elseif(is_string($feed) && !empty($feed)) { |
457 @ini_set('track_errors', 1); |
457 @ini_set('track_errors', 1); |
458 $oldValue = libxml_disable_entity_loader(true); |
458 //$oldValue = libxml_disable_entity_loader(true); |
459 $dom = new DOMDocument; |
459 $dom = new DOMDocument; |
460 $status = @$dom->loadXML($feed); |
460 try { |
461 foreach ($dom->childNodes as $child) { |
461 $dom = Zend_Xml_Security::scan($feed, $dom); |
462 if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) { |
462 } catch (Zend_Xml_Exception $e) { |
463 require_once 'Zend/Feed/Exception.php'; |
463 require_once 'Zend/Feed/Exception.php'; |
464 throw new Zend_Feed_Exception( |
464 throw new Zend_Feed_Exception( |
465 'Invalid XML: Detected use of illegal DOCTYPE' |
465 $e->getMessage() |
466 ); |
466 ); |
467 } |
467 } |
468 } |
468 //libxml_disable_entity_loader($oldValue); |
469 libxml_disable_entity_loader($oldValue); |
|
470 @ini_restore('track_errors'); |
469 @ini_restore('track_errors'); |
471 if (!$status) { |
470 if (!$dom) { |
472 if (!isset($php_errormsg)) { |
471 if (!isset($php_errormsg)) { |
473 if (function_exists('xdebug_is_enabled')) { |
472 if (function_exists('xdebug_is_enabled')) { |
474 $php_errormsg = '(error message not available, when XDebug is running)'; |
473 $php_errormsg = '(error message not available, when XDebug is running)'; |
475 } else { |
474 } else { |
476 $php_errormsg = '(error message not available)'; |
475 $php_errormsg = '(error message not available)'; |