0

外部テキストからすべての php タグを削除して、php に安全に含めることができるようにしたいと考えています。

これはサンプル入力です:

<?
?>
<html>
<?php ?>
<?= ?>
</html>
<?

または他の可能性

そして出力:

<html>
</html>

最後の php 開始タグに終了タグがない可能性があります!

4

2 に答える 2

3

あなたが望むことを正確に行うための優れた方法はないと思いますが、出力でPHPタグ(解析されていない)を送信することが許容される場合は、次を使用できます。

<?php echo file_get_contents('input.html'); ?>

それ以外の場合は、token_get_all メソッドを見てください。

http://www.php.net/manual/en/function.token-get-all.php

すべての結果を繰り返し処理して、タイプ T_INLINE_HTML の結果のみを返すことができます。

$toks = token_get_all( file_get_contents( 'input.html' ) );
foreach( $toks as $tok ) {
  if( $tok[0] == T_INLINE_HTML )   {
    print $tok[1];
  }
}
于 2012-07-17T23:46:31.423 に答える
2

これを行う適切な方法は、それを含めずに、代わりに を使用して文字列としてロードすることfile_get_contents()です。これにより、実行せずに PHP タグが保持されます。ただし、次の正規表現は、あなたが求めたことを正確に実行します。

#<\?.*?(\?>|$)#s

その文字列が表すものの内訳は次のとおりです。

# 式の開始と終了を示す区切り文字 - ほとんど何でも実行できます (できれば、正規表現自体に含まれていないもの)。
<\? PHP タグの先頭であるテキスト「<?」を見つけます。疑問符は通常、正規表現で特別な処理を行うため、疑問符の前にバックスラッシュが必要であることに注意してください。
.*? 必要なだけ多くのテキスト (".*") を含めますが、できるだけ少なくします ("?")。
(\?>|$) 終了 PHP タグ ("?>")、またはテキストの終了 ("$") で停止します。これは必ずしも最初の部分にとどまる必要はありませんが、前の部分は「できるだけ少ない」ため、そうします。
# 式の終わりを示す同じ区切り文字
■ パターンが複数の行にまたがることができることを示す特別なフラグ。これがないと、正規表現は PHP タグ全体 (先頭と末尾) を 1 行で見つけることを期待します。
于 2012-07-17T23:52:49.020 に答える