使用正则表达式在PHP中解析Blogspot.com中的BlogId
如何从给定的blogspot.com url获取blogid? 我在blogspot.com上查看了网页的源代码,看起来像这样使用正则表达式在PHP中解析Blogspot.com中的BlogId,php,parsing,blogspot,Php,Parsing,Blogspot,如何从给定的blogspot.com url获取blogid? 我在blogspot.com上查看了网页的源代码,看起来像这样 <link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.blogger.com/rsd.g?blogID=4899870735344410268" /> 我如何解析它以获得数字4899870735344410268$pageContents=file_get
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.blogger.com/rsd.g?blogID=4899870735344410268" />
我如何解析它以获得数字4899870735344410268$pageContents=file_get_contents('blospot_url');
$pageContents = file_get_contents('blospot_url');
preg_match('~<link rel="EditURI" type="application/rsd\+xml" title="RSD" href="http://www.blogger.com/rsd.g\?blogID=([0-9]+)" />~', $pageContents, $matches);
echo $matches[1];
预匹配(“~~”,$pageContents,$matches);
echo$匹配[1];
用于解析文档,然后使用其方法检索所需元素
我要强调的是:永远不要使用正则表达式来解析HTML文档。
function getBlogId($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$page = curl_exec ($ch);
curl_close($ch);
$doc = new DOMDocument();
@$doc->loadHTML($page);
$links = $doc->getElementsByTagName('link');
foreach($links as $link) {
$rel = $link->attributes->getNamedItem('rel');
if($rel && $rel->nodeValue == 'EditURI') {
$href = $link->attributes->getNamedItem('href')->nodeValue;
$query = parse_url($href, PHP_URL_QUERY);
if($query) {
$queryComp = array();
parse_str($query, $queryComp);
if($queryComp['blogID']) {
return $queryComp['blogID'];
}
}
}
}
return false;
}
示例用法:
$id = getBlogId('http://thehouseinmarrakesh.blogspot.com/');
echo $id; // 483911541311389592
-1:不要将
文件\u get\u contents()
与url一起使用<出于安全原因,已禁用代码>允许url打开建议的设置。建议最好的做法是保持这种状态。另外,永远不要用正则表达式解析HTML文档。我知道file\u get\u contents()。使用它是为了简单。为什么不使用正则表达式?HTML可能会一团糟,甚至DOMDocument有时也无法处理。DOMDocument的唯一问题是UTF-8文档,最近已经解决了。即使这样,这个特定的例子也不会受到影响。这里有一些最佳实践。普遍认为不应使用正则表达式解析HTML文档。在糟糕的HTML文档中,DOMDocument
唯一做不到的事情就是对它们保持沉默,这可以通过使用@
轻松解决。好的,我在等待你的示例:-)@streetparade:示例启动了。我收到了很多警告警告:DOMDocument::loadHTML()[DOMDocument.loadHTML]:htmlparsenityref:预期“;”在实体中,第19行在/var/www/blogger/blogger.php在线212@streetparade:你可以放心地忽略它们。使用@
@streetparade让他们安静下来:我已经更新了我的示例,以反映@
的正确用法。