3

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

4

1 回答 1

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
   }
于 2012-07-24T23:02:48.697 回答