質問

検索する/置き換える機能をテストしながら、私はメモリの問題を抱えています。

、検索対象があると言うます:

$subject = "

I wrote an article in the A+ magazine. It'\s very long and full of words. I want to replace every A+ instance in this text by a link to a page dedicated to A+.

";

発見される文字列ます:

$find='A+';
$find = preg_quote($find,'/');

置き換える関数コールバックます:

 function replaceCallback($match)
    {
      if (is_array($match)) {
          return '<a class="tag" rel="tag-definition" title="Click to know more about ' .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';
(見つかった場合は、交換)

この$の検索パターンは、その後7つのMySQLのテーブル全体で23列内で検索されます。

コンテンツの多くが欠落している)にpreg_replaceで返される対象(... <:

の代わりにpreg_replace_callback()の提案にpreg_replace()を使用すると、メモリの問題を解決しているようだが、私はパスダウン新たな問題を抱えています/ P>

UPDATE:

コンテンツ損失がpreg_quoteを($見つけ、「/」)を使用したためです。 今では、プロセスの後に「A」となっ...「A +」を除き、動作します。

役に立ちましたか?

解決

さてさて - 私が見ることができる、今、なぜあなたは、コールバックを使用している

まず第一に、私はこれまで、あなたのコールバックを変更すると思います。

function replaceCallback( $match )
{
    if ( is_array( $match ) )
    {
        $htmlVersion    = htmlspecialchars( $match[1], ENT_COMPAT, 'UTF-8' );
        $urlVersion     = urlencode( $match[1] );
        return '<a class="tag" rel="tag-definition" title="Click to know more about ' . $htmlVersion . '" href="?tag=' . $urlVersion. '">' . $htmlVersion  . '</a>';
    }
    return $match;
}

にstripslashesコマンドはあなたに何か良いをするつもりはありません。

限りメモリの問題に取り組むよう、あなたは複数のパターンにあなたのパターンを打破し、ループ内でそれらを実行することをお勧めします。私はあなたのマッチが1つだけのコール・サイクルでそれを処理するためのPHPには大きすぎる/複雑だと思います。

他のヒント

私はあなたのエラーを再現しようとしているが、最初に修正する必要がパースエラーがあります。どちらかこれは良いサンプルであっするのに十分なコードではありませんか、バグが本当にあります。

まず第一に、あなたは$の検索に保存する値は、プルパターンではありません - 私は、パターンの区切り文字を追加する必要がありました。

第二に、あなたの置き換え文字列は、アンカータグの閉鎖要素が含まれていません。

$subject = "
I wrote an article in the A+ magazine. It'\s very long and full of words. I want to replace every A+ instance in this text by a link to a page dedicated to A+.
";

$find='A+';
$find = preg_quote($find,'/');

function replaceCallback($match)
{
  if (is_array($match)) {
      return '<a class="tag" rel="tag-definition" title="Click to know more about ' .stripslashes($match[0]) . '" href="?tag=' . $match[0]. '">' . stripslashes($match[0])  . '</a>';
  }
}

$result = preg_replace_callback( "/$find/", 'replaceCallback', $subject);

echo $result;

このコードは動作しますが、私はそれはあなたが望むものだか分かりません。また、私はあなたがすべてでpreg_replace_callback()を必要としないという強い疑いを持っています。

ここで

これは私の作品、私は、プリプレグの試合を少し変更しなければならなかったが、それは、リンクに私のために、すべてのA +をオンにします。また、最後に</a>が欠落している。

$subject = "I wrote an article in the A+ magazine. It'\s very long and full of words. I want to replace every A+ instance in this text by a link to a page dedicated to A+.";

function replaceCallback($match)
{
    if (is_array($match)) 
    {
        return '<a class="tag" rel="tag-definition" title="Click to know more about ' .stripslashes($match[0]) . '" href="?tag=' . $match[0]. '">' . stripslashes($match[0])  . '</a>';
    }
}

$result = preg_replace_callback("/A\+/", "replaceCallback", $subject);

echo $result;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top