HTMLと混合したphpページがあります。いくつかのコード例:
<?php echo "<p>some text</p>"; ?>/* <? some php in comments ?> */
<p>some HTML text</p> <!-- <h1>some HTML in comments</h1> -->
<? $header_info = <<<END
\$some="<?php @ob_start(); @session_set_save_handler(); ?>";
END; ?>
<h2>Some more HTML</h2>
PHP タグと HTML タグごとに分割したいのですが、PHP タグまたは HTML タグは引用符またはコメントでそのままにしておきます。これは私がこれまでに持っているものです:
$array = preg_split("/((^<\?php)|([^'|\"]<\?php)|([^'|\"]<\?)|([^'|\"]\?>)|(<\%)|(\%>))/i", $string, -1);
私が抱えている問題は、最後の $array で HTML の閉じ括弧 '>' の一部が欠落していることです。HTML の開始タグと終了タグはそのままにしておきたいと思います。時々私はで終わる
<p></p instead of <p></p>
次のようになります。
[0] echo "<p>some text</p>";
[1] <p>some HTML text</p>
[2] $header_info = <<<END
\$some="<?php @ob_start(); @session_set_save_handler(); ?>";
END;
[3] <h2>Some more HTML</h2>
preg_split がコメントを区切り文字として認識せず、無視する限り、コメントは配列の一部である必要はありません。
また、特に eval() を使用する場合、一部の php タグが次のようになる可能性があることにも気付きました。
"?> <p>some HTML text</p> <?";
これは、正規表現の引用符がこれらのケースのいずれにも一致しないことを意味します。
Preg_match() の方が良いオプションかもしれませんが、確かではありません。
正規表現に関してはあまり独創的ではなく、この時点で立ち往生しているため、どんな助けも大歓迎です。
どうもありがとう :)