编程语言
首页 > 编程语言> > php-使用preg_replace清理小部件输出HTML

php-使用preg_replace清理小部件输出HTML

作者:互联网

我正在使用插件/侧边栏小部件的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>

对于您的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” ,,“,$yHtml)

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

在此之后,另一个“更好”的解决方案是将所有项目放入具有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>我的< div>项目1< / div>< / div>)此代码可以正常工作.

这样,您可以将所有数据存储在一个数组中,并且更易于操作.
我不知道您的php学位,但只是执行一个foreach循环

   foreach($matchs[1] as $v){
      //$v is one item
   }

标签:wordpress-plugin,preg-replace,wordpress,php
来源: https://codeday.me/bug/20191201/2077594.html