2011-06-23 31 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