我正在开发一个使用插件/侧边栏小部件的wordpress网站。我遇到的问题是小部件生成的HTML无效,下面是一个例子。。。
<p>
<div>I am item 1</div>
<div>I am item 2</div>
<div>I am item 3</div>
<div>I am item 4</div>
<p></p>
根据我的理解,这段代码有两个错误,第一个是它在段落中使用了div(块级元素)。第二个是有一个额外的P标签,它在末尾没有闭合。
我已经和小部件开发人员谈过了,尽管这是一个昂贵且付费的插件,但我并不急于解决这个问题。
我将尝试使用preg_replace来清理代码,我想知道是否有人有这样做的示例或教程,并且只针对小部件容器中的代码?
首先,当我看到您的数据(项目列表)时,我认为<ul> <li>
会更好:
<ul>
<li>I am item 1</li>
<li>I am item 2</li>
<li>I am item 3</li>
<li>I am item 4</li>
</ul>
对于你的怀孕,如果你只是简单地使用str_replace(不那么昂贵),那就更好了
str_replace(array("<div>","</div>","<p>","</p>"), array("<li>","</li>","<ul>","</ul>"),$yourHtml)
然后通过str_replace("<ul></ul>", "",$yourHtml)
删除空的<p></p>
(现在的<ul></ul>
)
但更好的解决方案是自己编辑插件并定义不同的输出!
不过,另一个"更好"的解决方案是使用preg_match_all获取数组中的所有项。
示例:
$html="<p>
<div>my item 1</div>
<div>my item 2</div>
<div>my item 3</div>
<p></p>";
preg_match_all("#<div>(.*)</div>#",$html,$matchs);
var_dump($matchs[1]);
//var_dump output : array(3) { [0]=> string(9) "my item 1" [1]=> string(9) "my item 2" [2]=> string(9) "my item 3" }
如果<div>
中没有<div>
(我的意思是:<div> my <div>item 1</div></div>
),则此代码可以正常工作。
通过这种方式,您可以在一个数组中获得所有数据,并且它们更容易操作。我不知道你的php学位,但只是执行一个foreach循环
foreach($matchs[1] as $v){
//$v is one item
}