0

ユーザーによるテキスト入力を実行し、タグに含まれるテキストを html に置き換えるスクリプトがあります。ほとんど問題なく動作しますが、タグの 1 つが問題を引き起こしています。

[include=someFile.php] は someFile.php のコンテンツをページにロードする必要があり、[inlude=thatFile.txt] は thatFile.txt をロードする必要があります。ただし、include タグの複数のインスタンスがあり、それぞれが異なるファイルを参照している場合、それらすべてが含まれているファイルの 1 つだけに置き換えられます。私が使用しているコードはこれです...

if (preg_match ("/\[include=(.+?)\]/", $text, $matches)) {
  foreach ($matches as $match) {
    $match = preg_replace("/\[include=/", "", $match);
    $match = preg_replace("/\]/", "", $match);
    $include = $match;
    $file_contents = file_get_contents($include);
    $text = preg_replace("/\[include=(.+?)\]/", "$file_contents", $text);
  }
}

foreach ループの最後の行は、一致したタグのすべてのインスタンスを現在のタグで見つかったものに置き換えているようですが、どうすればよいかわかりません。アドバイスをいただければ幸いです。

編集: Uby のおかげで、次の変更を加えたところ、現在は機能しています。

if (preg_match_all ("/\[include=(.+?)\]/", $text, $matches)) {

    foreach ($matches[0] as $match) {
        $file = preg_replace("/\[include=/", "", $match);
        $file = preg_replace("/\]/", "", $file);
        $file_contents = file_get_contents($file);
        $text = str_replace("$match", "$file_contents", $text);
    }

}
4

1 に答える 1

0

preg_match()あなたのケースでは、使用する必要がありますpreg_match_all()(ドキュメントhttp://php.net/manual/en/function.preg-match-all.phpを参照)

ドキュメントを注意深く読んでください。ループはこのようには機能しません。

于 2013-04-05T18:11:26.000 に答える