使用preg_replace清理窗口小部件输出HTML

时间:2012-07-24 22:51:49

标签: php wordpress wordpress-plugin preg-replace

我正在使用一个使用插件/侧边栏小部件的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来清理代码,我想知道是否有人有任何示例或教程来执行此操作并仅仅针对窗口小部件容器中的代码?

1 个答案:

答案 0 :(得分:3)

首先,当我看到您的数据(项目列表)时,我认为<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>

对于preg_replace,如果你只使用str_replace(更便宜),它甚至会更好

str_replace(array("<div>","</div>","<p>","</p>"), array("<li>","</li>","<ul>","</ul>"),$yourHtml)

然后您按<p></p>

删除空的<ul></ul>(现在str_replace("<ul></ul>", "",$yourHtml)

但是甚至更好的解决方案是自己编辑插件并定义不同的输出!


之后,另一个“更好”的解决方案是使用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
   }