Ben bir imleme sistemi yapıyorum ve PHP ile bir sayfanın başlığı almak için (kolay) en hızlı yol arıyorum.
Bu $title = page_title($url)
gibi bir şey olması güzel olurdu
<?php
function page_title($url) {
$fp = file_get_contents($url);
if (!$fp)
return null;
$res = preg_match("/<title>(.*)<\/title>/siU", $fp, $title_matches);
if (!$res)
return null;
// Clean up title: remove EOL's and excessive whitespace.
$title = preg_replace('/\s+/', ' ', $title_matches[1]);
$title = trim($title);
return $title;
}
?>
Er 'aşağıdaki girişi üzerinde bir koşuşturma verdi:
print page_title("http://www.google.com/");
Outputted: Google
Sizin kullanım için yeterli Umarım genel. Eğer daha güçlü bir şey gerekiyorsa, HTML ayrıştırıcılarını araştırma içine biraz zaman yatırım için zarar olmayabilir.
EDIT: hata denetimi biraz eklendi. Tür üzgünüm, dışarı ilk sürümü koştu.
veya biraz daha fazla kurşun geçirmez bu basit işlev yapma:
function page_title($url) {
$page = @file_get_contents($url);
if (!$page) return null;
$matches = array();
if (preg_match('/<title>(.*?)<\/title>/', $page, $matches)) {
return $matches[1];
}
else {
return null;
}
}
echo page_title('http://google.com');
Regex?
cURL $ HtmlSource değişkenin içeriğini almak için kullanın.
preg_match('/<title>(.*)<\/title>/iU', $htmlSource, $titleMatches);
print_r($titleMatches);
bu dizi ne var bakın.
Çoğu insan regexs güvenilmez olabilir gibi bir ayrıştırıcı kullanmak gerekir ama geçme HTML söylüyorlar.
Diğer cevaplar daha fazla ayrıntı sağlar :)
Regex ile 'SimpleXML kullanarak gibi, bu ben oluşturdum bir OpenID kütüphanede bir sayfa birden fazla bağlantı başlıklarını kapmak için kullanabileceğiniz bir çözüm değil. Ben (usually tek bile olsa) başlığı ile çalışmak için adapte ettik.
function getTitle($sFile)
{
$sData = file_get_contents($sFile);
if(preg_match('/<head.[^>]*>.*<\/head>/is', $sData, $aHead))
{
$sDataHtml = preg_replace('/<(.[^>]*)>/i', strtolower('<$1>'), $aHead[0]);
$xTitle = simplexml_import_dom(DomDocument::LoadHtml($sDataHtml));
return (string)$xTitle->head->title;
}
return null;
}
echo getTitle('http://stackoverflow.com/questions/399332/fastest-way-to-retrieve-a-title-in-php');
İronik bu sayfayı bazen saf regex çözümlerle sorunları neden ne başlık etiketi bir "title etiketi" vardır.
O küçük biçimlendirme / case (XML gibi) önemli ise iç içe etiketi için bir sorun neden olabilir etiketleri gibi bu çözüm mükemmel değil, ama bu soruna biraz daha karmaşıktır yolu vardır.