我在PHP中执行此功能以获取页面标题。我知道它可能看起来有点乱,但那是因为我是PHP的初学者。我之前在if中使用了preg_match("/<title>(.+)<\/title>/i",$returned_content,$m)
并且它没有像我预期的那样工作。
function get_page_title($url) {
$returned_content = get_url_contents($url);
$returned_content = str_replace("\n", "", $returned_content);
$returned_content = str_replace("\r", "", $returned_content);
$lower_rc = strtolower($returned_content);
$pos1 = strpos($lower_rc, "<title>") + strlen("<title>");
$pos2 = strpos($lower_rc, "</title>");
if ($pos2 > $pos1)
return substr($returned_content, $pos1, $pos2-$pos1);
else
return $url;
}
当我尝试使用上述函数获取以下页面的标题时,这就是我所得到的: http://www.google.com - &gt; “302感动” http://www.facebook.com - &gt; “” http://www.facebook.com” http://www.revistabula.com/posts/listas/100-links-para-clicar-antes-de-morrer - &gt; “http://www.revistabula.com/posts/listas/100-links-para-clicar-antes-de-morrer” (当我在链接的末尾添加一个/,我可以成功获得标题:“100个链接para clicar antes de morrer | Revista Bula”)
我的问题是: - 当我尝试访问google.com时,我知道google正在重定向到我国家的镜像,但是如何才能获得重定向到的页面标题? - 我的功能有什么问题让它获得某些页面的标题,而不是其他页面的标题?
答案 0 :(得分:5)
HTTP客户端应遵循重定向。 302状态代码意味着您尝试获取的内容不在该位置,并且客户端应该遵循Location:
标头来确定它的位置。
这里有两个问题。第一个不是重定向。如果你使用cURL,你可以通过设置它来使它遵循重定向:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
请参阅此问题以获得完整的解决方案:
第二个问题是您使用RegEx解析HTML。 Don't do that。请参阅此问题以获得更好的替代方案:
答案 1 :(得分:0)
为什么不尝试这样的事情?效果很好。
function get_page_title($url)
{
$source = file_get_contents($url);
$results = preg_match("/<title>(.*)<\/title>/", $source, $title_matches);
if (!$results)
return null;
//get the first match, this is the title
$title = $title_matches[1];
return $title;
}