微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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
   }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐