使用正则表达式在PHP中解析Blogspot.com中的BlogId

使用正则表达式在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

如何从给定的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_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让他们安静下来:我已经更新了我的示例,以反映
@
的正确用法。