3

プラグイン/サイドバー ウィジェットを使用するワードプレス サイトに取り組んでいます。私が経験している問題は、ウィジェットが無効な 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>

私の理解では、このコードには 2 つの問題があります。1 つ目は、段落内で div (ブロック レベル要素) を使用していることです。2 つ目は、最後に閉じられていない余分な 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 に答える