2015-11-05 94 views
1

我想爲我的頁面解析HTML標題並添加一個ID以匹配內容。我已經成功與find做到這一點和替換,但是當任何附加的HTML屬性都存在失敗...PHP爲標題添加標識屬性

下面有什麼頭陣列中的改變

[ 
    'find' => sprintf('<h%u>%s</h%u>', $level, $title, $level), 
    'replace' => sprintf('<h%u id="%s">%s</h%u>', $level, slugify($title), $title, $level), 
    'slug' => slugify($title) 
] 

的更換是後來做...

foreach ($parsed_content as $fix) { 
    $content = str_replace($fix['find'], $fix['replace'], $content); 
} 

這是不這樣做,我知道最好的方式,但它只是一個測試,現在,使其正常工作,我想我只需要使用正則表達式,而不是一個標準的str_replace呼叫。

我正在使用DOMDocument,會有一種替代方法可能嗎?

編輯:我試圖用xpath來mainipulate html。我有一個簡單的循環來獲取數據,但我不知道如何將代碼應用於實際文檔。有任何想法嗎?下面有什麼,我有個大氣壓

$dom = new DOMDocument; 
$dom->loadHTML($the_dom); 
$xpath = new DOMXPath($dom); 

$elements = $xpath->query('(//h1|//h2|//h3|//h4|//h5)'); 

foreach ($elements as $index => $element) { 

    $element->setAttribute('id', sanitize_title($element->textContent)); 
    pr($element); 

} 
+3

這個傳奇職位將再次生活! http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

回答

0

我的建議是用JS來實現這一目標。

首先,設置JS變量與PHP變量的值:

var level = <?= $level ?>; // inject PHP into JS 
var title = <?= $title ?>; 

然後,使用JS(或jQuery的)來替換內容:

$("h" + level).text(title); 

我想操縱的這種方法客戶端的DOM比使用服務器端語言的正則表達式更容易。