2011-06-23 25 views
2

好的,所以說我有一個WordPress的帖子,並且某些單詞被包裹在一個span標籤中。這是可能的使用PHP?

例如:

<p>John went to the <span>bakery</span> today, and after picking up his favourite muffin  he made his way across to the <span>park</span> and spent a couple hours on the <span>swings</span> with his friends.</p> 

,然後再使用PHP動態地吐出來(在span標籤的話)出在我的模板文件的有序列表的方法嗎?

像這樣:

<h3>What John Did Today</h3> 
<ol> 
<li>bakery</li> 
<li>park</li> 
<li>swings</li> 
</ol> 

如果有人可以點在如何做這樣的事情向正確的方向,這將是大加讚賞。謝謝。

+0

您可以使用JavaScript去通過DOM和吐出格式化文本到一個div。 – Rasika

回答

5
$str = '<p>John went to the <span>bakery</span> today, and after picking up his favourite muffin  he made his way across to the <span>park</span> and spent a couple hours on the <span>swings</span> with his friends.</p>'; 

$d = new DomDocument; 
$d->loadHTML($str); 

$xpath = new DOMXPath($d); 
echo "<h3>What John Did Today</h3>\n"; 
echo "<ol>\n"; 
foreach ($xpath->query('//span') as $span) 
    echo "<li>".$span->nodeValue."</li>\n"; 
echo "</ol>\n"; 
0

我不是一個正則表達式高手,但這應該更換<span>標籤做的工作與<li>標籤:

$str = preg_replace("/<span>([^[]*)<\/span>/i", "<li>$1</li>", $str); 

..我知道這並不直接回答你的問題,但它應該有助於你在這一點上大聲笑

編輯:完全實際工作正則表達式解決方案獲取所有的span標籤到數組和轉換爲列表項在同一時間:

// input string: 
$str = '<span>Walk</span> blah <span>Drive</span> blah blee blah <span>Eat</span>'; 

// get array of span matches 
preg_match_all("/(<span>)(.*?)(<\/span>)/i", $str, $matches, PREG_SET_ORDER); 

// build array using the exact matches 
foreach($matches as $val){ 
    $spanArray[] = preg_replace("/<span>([^[]*)<\/span>/i", "<li>$1</li>", $val[0]); 
} 

如果再print_r($spanArray);你應該得到的東西看起來是這樣的:

Array 
(
    [0] => <li>Walk</li> 
    [1] => <li>Drive</li> 
    [2] => <li>Eat</li> 
) 
+0

我只是想警告,[你不應該使用正則表達式的HTML解析](http://stackoverflow.com/a/1732454/7613) – Andrew