public function testStripXmlTag() { $data = file_get_contents('tests/fixtures/jeux-linux.fr.xml'); $this->assertEquals('<rss', substr(Filter::stripXmlTag($data), 0, 4)); $data = file_get_contents('tests/fixtures/ezrss.it'); $this->assertEquals('<!DOC', substr(Filter::stripXmlTag($data), 0, 5)); $data = file_get_contents('tests/fixtures/fulltextrss.xml'); $this->assertEquals('<rss', substr(Filter::stripXmlTag($data), 0, 4)); $data = file_get_contents('tests/fixtures/sametmax.xml'); $this->assertEquals('<rss', substr(Filter::stripXmlTag($data), 0, 4)); $data = file_get_contents('tests/fixtures/grotte_barbu.xml'); $this->assertEquals('<rss', substr(Filter::stripXmlTag($data), 0, 4)); $data = file_get_contents('tests/fixtures/ibash.ru.xml'); $this->assertEquals('<rss', substr(Filter::stripXmlTag($data), 0, 4)); $data = file_get_contents('tests/fixtures/pcinpact.xml'); $this->assertEquals('<rss', substr(Filter::stripXmlTag($data), 0, 4)); $data = file_get_contents('tests/fixtures/resorts.xml'); $this->assertEquals('<rss', substr(Filter::stripXmlTag($data), 0, 4)); $data = file_get_contents('tests/fixtures/rue89.xml'); $this->assertEquals('<rss', substr(Filter::stripXmlTag($data), 0, 4)); $data = file_get_contents('tests/fixtures/cercle.psy.xml'); $this->assertEquals('<rss', substr(Filter::stripXmlTag($data), 0, 4)); $data = file_get_contents('tests/fixtures/lagrange.xml'); $this->assertEquals('<feed', substr(Filter::stripXmlTag($data), 0, 5)); $data = file_get_contents('tests/fixtures/atom.xml'); $this->assertEquals('<feed', substr(trim(Filter::stripXmlTag($data)), 0, 5)); $data = file_get_contents('tests/fixtures/atomsample.xml'); $this->assertEquals('<feed', substr(trim(Filter::stripXmlTag($data)), 0, 5)); $data = file_get_contents('tests/fixtures/planete-jquery.xml'); $this->assertEquals('<rdf:RDF', trim(substr(trim(Filter::stripXmlTag($data)), 0, 8))); }
/** * Get the first XML tag * * @access public * @param string $data Feed content * @return string */ public function getFirstTag($data) { // Strip HTML comments (max of 5,000 characters long to prevent crashing) $data = preg_replace('/<!--(.{0,5000}?)-->/Uis', '', $data); /* Strip Doctype: * Doctype needs to be within the first 100 characters. (Ideally the first!) * If it's not found by then, we need to stop looking to prevent PREG * from reaching max backtrack depth and crashing. */ $data = preg_replace('/^.{0,100}<!DOCTYPE([^>]*)>/Uis', '', $data); // Strip <?xml version.... $data = Filter::stripXmlTag($data); // Find the first tag $open_tag = strpos($data, '<'); $close_tag = strpos($data, '>'); return substr($data, $open_tag, $close_tag); }