3

用語がよくわからないので、先に失礼します。

私は文字列をクエリする PHP テンプレート エンジンを作成しようとしています。<ZONE header>それ</ZONE header>はその間にあるすべてのものを取得し、php 関数を実行してヘッダーが存在するかどうかを確認します。ヘッダーが存在する場合はその間にあったものを表示し、ヘッダーが存在しない場合は間にあったものを削除します。

次に例を示します。

$string = "
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<ZONE header><img src="images/header.jpg" /></ZONE header>
<p>Nam sollicitudin mattis nisi, eu convallis mi tincidunt vitae.</p>
";

関数は理想的には削除<ZONE header><img src="images/header.jpg" /></ZONE header>し、作成したphp関数を実行してheader()、データベースに「ヘッダー」が存在するかどうかを確認し、存在する場合は内部<ZONE header></ZONE header>のすべてを表示し、存在しない場合は削除します文字列から。

「ヘッダー」が存在する場合:

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<img src="images/header.jpg" />
<p>Nam sollicitudin mattis nisi, eu convallis mi tincidunt vitae.</p>

「ヘッダー」が存在しない場合:

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Nam sollicitudin mattis nisi, eu convallis mi tincidunt vitae.</p>

これが私が取り組んでいたものですが、行き詰まりました:

        preg_match_all("|\<ZONE_header>(.*)\<\/ZONE_header>|isU", $string, $zone, PREG_SET_ORDER);

        if (isset($zone) && is_array($zone)) {
            foreach ($zone as $key => $zoneArray) {
                if ($key == 0) { 
                    $html = $zoneArray[1];
                    if ($html != "") {
                        if (header() != "") {
                            $html = str_replace($zoneArray[0], NULL, $html);
                        }
                    }                       
                }
            }
        }

        echo $html;

アイデア、考え、提案はありますか?助けてくれてありがとう!

4

2 に答える 2

0

header()関数をに置き換えることに注意してくださいget_header()

$string = preg_replace_callback('/<ZONE header>(.+)<\/ZONE header>/', 'replace_header', $string);

function replace_header($matches) {
  return get_header() ? $matches[1] : '';
}

のドキュメントを参照してくださいpreg_replace_callback

于 2012-05-22T08:04:18.967 に答える
0

このような ?

$string = '
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<ZONE header><img src="images/header.jpg" /></ZONE header>
<p>Nam sollicitudin mattis nisi, eu convallis mi tincidunt vitae.</p>
';
$pattern="#<ZONE header[^>]*>(.+)</ZONE header>#iU"; 

preg_match_all($pattern, $string, $matches);
if (strlen($matches[0][0])==0){
    $string=strip_tags($string,"<p>");
}
else{
    $string=strip_tags($string,"<p><img>");

}
echo $string;
于 2012-05-22T08:12:40.487 に答える