2011-02-24 21 views
1

我有一個動態站點地圖創建腳本,遞歸地查看文件系統,並在需要時打開文件的開始,然後查找標籤之間的文本。它工作時,設置像...標籤與PHP邏輯之間的PHP preg_match

<title>Page Title | Company, Inc.</title> 

但現在我已經添加了皺紋,併成立了方式通過管理工具來管理標題和元信息。以防萬一,不進入,我想回退到舊的默認標題信息,但我的preg_match不工作這...

<title><[email protected]$page_meta_array['page_title']!=''?$page_meta_array['page_title']:"Default Title Here";?> | Company, Inc.</title> 

PHP函數,我的頁面傳遞給外觀像這樣...

function get_title($filename) { 
    $retval = ""; 
    $handle = fopen($filename, "r"); 
    $head = fread($handle, 4096); 
    preg_match(";<title>(.+)</title>;", $head, $matches); 
    if(sizeof($matches) == 2) { 
     $retval = trim($matches[1]); 
    } 
    fclose($handle); 

    return $retval; 
} 

有人能指點我正確的preg_match嗎?我希望在上面的第二個示例中返回「Default Title Here」。

感謝

回答

0

這可能做到這一點:

preg_match(';<title><\?[^>]*"([^"]*)"[^>]*></title>;', $head, $matches); 

注意短標籤已被棄用,並且可能無法在PHP6工作。

+0

感謝您對短標籤語法的幫助和提示。猜測每次我想顯示一個變量時,我都必須習慣<?php echo $ x?>。這很糟糕。我得到了的問題,但我敢肯定,可能有更好的方法來實現...也許增加步驟如果我甚至在我的代碼中使用XML? – Don 2011-02-28 04:00:25

0

您首先需要解析PHP代碼,然後檢查匹配項。你爲什麼不使用$ page_meta_array ['page_title']的內容?

+0

它將使用數組值,如果它已被設置。我構建了一個輕量級管理工具,允許某人爲每個頁面設置標題/ meta desc/meta關鍵字。數據曾經是靜態的,並沒有在可能的頁面上設置。當我把代碼從數據庫中提取新數據時,我做了<?= @ $ page_meta_array ['page_title']!=''?$ page_meta_array ['page_title']:「Default Title Here」;?>部分保持以前靜態的地方,直到他們在數據庫中添加一個新標題... – Don 2011-02-28 03:52:27