検索/置換機能のテスト中にメモリの問題が発生しました。
検索対象は次のとおりです。
$subject = "A+マガジンに記事を書きました。 それは非常に長く、言葉でいっぱいです。 このテキストのすべての A+ インスタンスをリンクに置き換えたい A+専用ページへ。
";
検索する文字列:
$find='A+'; $find = preg_quote($find,'/');
置換関数のコールバック:
関数 replaceCallback($match) { if (is_array($match)) { return '<a class="tag" rel="tag-definition" title="クリックして、' .stripslashes($match[0]) . '" href="?tag=' . $match[0] の詳細を確認してください. '>' . stripslashes($match[0]) . '</a>'; } }
そして呼び出し:
$result = preg_replace_callback($find, 'replaceCallback', $subject);
これで、完全な検索パターンがデータベースから取得されます。現在のところ、次のとおりです。
$find = '/(?![^<]+>)\b(voice recognition|test project reference|test|synesthesia|Superflux 2007|Suhjung Hur|scripts|Salvino a. Salvaggio|Professional Lighting Design Magazine|PLDChina|Nicolas Schöffer|Naziha Mestaoui|Nabi Art Center|Markos Novak|Mapping|Manuel Abendroth|liquid architecture|LAb[au] laboratory for Architecture and Urbanism|l'Arca Edizioni|l' ARCA n° 176 _ December 2002|Jérôme Decock|imagineering|hypertext|hypermedia|Game of Life|galerie Roger Tator|eversion|El Lissitzky|Bernhard Tschumi|Alexandre Plennevaux|A+)\b/s';
この $find パターンは、7 つの mysql テーブルの 23 列で検索されます (見つかった場合は置き換えられます)。
preg_replace_callback() の代わりに提案された preg_replace() を使用すると、メモリの問題は解決したようですが、途中で新しい問題が発生しています: preg_replace() によって返された件名に多くのコンテンツがありません...
アップデート:
コンテンツの損失は preg_quote($find,'/'); の使用によるものです。プロセス後に「A」になる「A+」を除いて、現在は機能しています。