PHP GetElementsByTagName错误
我写了一个很长的代码,我不得不从一个网站上检索很多标签,例如标题,h1,h2,h3,a,p等等。我首先用preg_match做了这件事,但很快意识到这是错误的做法。所以我开始用这个:PHP GetElementsByTagName错误,php,Php,我写了一个很长的代码,我不得不从一个网站上检索很多标签,例如标题,h1,h2,h3,a,p等等。我首先用preg_match做了这件事,但很快意识到这是错误的做法。所以我开始用这个: function getTextBetweenTags($string, $tagname){ $d = new DOMDocument(); $d->loadHTML($string); $return = array(); foreach($d->getElement
function getTextBetweenTags($string, $tagname){
$d = new DOMDocument();
$d->loadHTML($string);
$return = array();
foreach($d->getElementsByTagName($tagname) as $item){
$return[] = $item->textContent;
}
return $return;
}
要检索标记:$title=getTextBetweenTags($contents,'title')代码>
这在正在使用的testpage上运行良好,这是一个wikipedia页面
但当我在另一页上测试它时,它给了我很多错误,比如:
警告:DOMDocument::loadHTML()[DOMDocument.loadHTML]:输入不正确UTF-8,请指示编码!在实体中
在这之后有很多:
警告:DOMDocument::loadHTML()[DOMDocument.loadHTML]:HTMLParserEntityRef:应为“;”在实体中,
我做了一些研究,发现它期待一个“&;”代码>而不是&
,例如,在每个“特殊字符”之后,它都需要一个
但由于它使用file\u get\u contents
检索内容($file\u contents=file\u get\u contents($url);
)。我真的不想回到preg\u match
(出于明显的原因),所以我想问你们是否知道如何解决我的问题
提前谢谢 您可以使用解决此问题。当前,每次调用函数时,函数都会调用loadHTML()
。我只需在函数外部加载HTML,并将其作为参数传递
$dom = new DOMDocument();
$errorState = libxml_use_internal_errors(TRUE); // don't display errors
$dom->loadHTML($string);
libxml_use_internal_errors($errorState); // reset the state
function getTextBetweenTags(DOMDocument $dom, $string, $tagname) {
$return = array();
foreach($dom->getElementsByTagName($tagname) as $item){
$return[] = $item->textContent;
}
return $return;
}
用法示例:
$string = file_get_contents($url);
$title = getTextBetweenTags($dom, $string, 'title');
欢迎来到解析无效html的世界…嘿,谢谢你的回答,它比以前工作得多!但是,它不再允许我找到标题
和i
。而且不知怎么搞砸了我的if语句。我不知道你有没有时间看看这个?如果你感兴趣,我会编辑我的问题,你可以看一下。好吧,我解决了我的问题,我在$dom->loadHTML($string)中包含了错误的$
代码>。谢谢你的帮助。我接受了你的回答。