1

どんなに頑張っても、PREG と私はうまくいかないので、PHP の専門家の 1 人が助けてくれることを願っています..

PHP スクリプトに入る HTML ソース コードがいくつかあり、ソース コードから特定のアイテムを取り除く/削除する必要があります。

まず、これが HTML の一部として入ってくる場合 (複数のインスタンスである可能性があります):

<SPAN class=placeholder title="" jQuery1262031390171="46">[[[SOMETEXT]]]</SPAN>

単純に[[[SOMETEXT]]]に変換したい

接頭辞は常に次のようになることに注意してください(私は思う):

<SPAN class=placeholder

.. 接尾辞は常に

</SPAN>

(はい、大文字のSPAN ) ですが、title=""jQuery###="#"の部分は異なる場合があります。[[[SOMETEXT]]]は何でもかまいません。基本的には SPAN タグを削除してください。

次に、これが HTML の一部である場合 (複数のインスタンスである可能性もあります):

<span style="" class="placeholder" title="">[[[SOMETEXT]]</span>

.. 同じこと - [[[SOMETEXT]]]部分を残したいだけです。piece は常にプレフィックスになると思います。(この場合、小文字のスパンタグ) がサフィックスになります。

これにはおそらく 2 つの PREG コマンドが必要であることは理解していますが、html テキストを関数に渡して、次のようなクリーン/ストリップ バージョンを取得できるようにしたいと考えています。

$dirty_text = $_POST['html_text'];
$clean_text = strip_placeholder_spans($dirty_text);
function strip_placeholder_spans( $in_text ) {
 // all the preg magic happens here, and returns result
}

わかりやすくするために追加/更新

わかりました。良いフィードバックをいくつか得て、近づいています。ただし、わかりやすくするために、ここに例を示します。このテキストを関数 strip_placeholder_spans() に送りたい:

<blockquote>
<h2 align="center">Firefox: <span class="placeholder" title="">[[[ITEM1]]]</span></h2>
<h2 align="center">IE1:<SPAN class=placeholder title="" jQuery1262031390171="46">[[[ITEM2]]]</SPAN>
</h2>
<h2 align="center">IE2:<SPAN class=placeholder title="" jQuery1262031390412="52">[[[ITEM3]]]</SPAN> 
</h2>
<h2 align="center"><br><font face="Arial, Helvetica, sans-serif">COMPLETE</font></h2>
<p align="center">Your Text Can Go Here</p>
<p align="center"><a href="javascript:self.close()">Close this Window</a></p>
<p align="center"><br></p>
<p align="center"><a href="javascript:self.close()"><br></a></p></blockquote>
<p align="center"></p>

戻ってくると、次のようになります。

<blockquote>
<h2 align="center">Firefox: [[[ITEM1]]]</h2>
<h2 align="center">IE1:[[[ITEM2]]]</h2>
<h2 align="center">IE2:[[[ITEM3]]]</h2>
<h2 align="center"><br><font face="Arial, Helvetica, sans-serif">COMPLETE</font></h2>
<p align="center">Your Text Can Go Here</p>
<p align="center"><a href="javascript:self.close()">Close this Window</a></p>
<p align="center"><br></p>
<p align="center"><a href="javascript:self.close()"><br></a></p></blockquote>
<p align="center"></p>
4

3 に答える 3

1

HTML 解析を使用します。これは最も堅牢なソリューションです。次のコードは、投稿した 2 つのコード例で機能します。

$s= <<<STR
<span style="" class="placeholder" title="">[[[SOMETEXT]]</span>
Some Other text &amp; <b>Html</b>
<SPAN class=placeholder title="" jQuery1262031390171="46">[[[SOMETEXT]]]</SPAN>
STR;

preg_match_all('/\<span[^>]+?class="*placeholder"*[^>]+?>([^<]+)?<\/span>/isU', $s, $m);
var_dump($m);

正規表現を使用すると、非常に的を絞ったコードになります。この例では、非常に具体的な HTML と整形式の HTML のみを処理します。たとえば、解析しません<span class="placeholder">some text < more text</span>。ソース HTML を制御できる場合は、これで十分です。

于 2009-12-28T21:20:17.967 に答える
1

ステップ 1: HTML を扱うときは、ツールボックスから正規表現を削除します。パーサーが必要です。

ステップ 2: PHP 用のsimple_html_domをダウンロードします。

ステップ 3: 解析

$html = str_get_html('<SPAN class=placeholder title="" jQuery1262031390171="46">[[[SOMETEXT]]]</SPAN>');
$spanText = $html->find('span', 1)->innerText;

ステップ4:利益!

編集

$html->find('span.placeholder', 1)->tag, $matches);あなたが望むものを返します。class=placeholder を探します。

于 2009-12-28T21:00:02.987 に答える
1

これで問題が解決すると思います

function strip_placeholder_spans( $in_text ) {
preg_match("/>(.*?)<\//", $in_text, $result);
return $result[1]; }
于 2009-12-28T21:00:47.503 に答える