2012-05-08 15 views
2

私は通常、PHPの問題をすべて自分で解決するのにはかなり効率的ですが、この特定の問題では解決策が見つからないようです。文字列内のすべての括弧で囲まれた単語の置換すべて

標準のテキストで構成された$文字列があり、テキストには[角括弧]で囲まれた特定のキーワードがリンクに変換されますが、文字列との比較は簡単ではありませんあらかじめ定義された「既知の」キーワードの配列と簡単な置き換えを行います。なぜなら、[角括弧]の内容は何でもかまいません。

たとえば私は、以下のものが必要になります。

John Roberts is a jazz musician from Florida born in 1934. Some of his notable works include [A Gray Sky] and [Sophomore Effort]. 

は以下にオンにする必要があり:

John Roberts is a jazz musician from Florida born in 1934. Some of his notable works include <a href="search.php?search=a+gray+sky">A Gray Sky</a> and <a href="search.php?search=sophomore+effort">Sophomore Effort</a>. 

ことに留意すべきである:$文字列が含まれています

  • 未知数の[括弧で囲まれた単語]。
  • 角カッコを使用することは問題を引き起こす場合は必須ではありませんが、現在のところ最も便利な方法です。

私にコードを渡すことを求めているわけではありません。私が必要とするのは、どのようなPHP関数を調査して正しい方向に向けるべきか教えてくれる人です。

大変ありがとうございました。ありがとうございました

+0

するpreg_match \ []のために置き換え、その後でurlencode() –

答えて

3
$string = "John Roberts is a jazz musician from Florida born in 1934. Some of his notable works include [A Gray Sky] and [Sophomore Effort]."; 

function rep_callback($match) 
{ 
     $query = substr($match[0],1,-1); 
     $query = urlencode($query); 
     $link = '<a href="search.php?search='.$query.'">'.$match[0].'</a>'; 
     return $link; 
} 

echo $string."\n"; 
echo preg_replace_callback("/\[.+\]/U", "rep_callback", $string)."\n"; 

出力:

John Roberts is a jazz musician from Florida born in 1934. Some of his notable works include [A Gray Sky] and [Sophomore Effort]. 
John Roberts is a jazz musician from Florida born in 1934. Some of his notable works include <a href="search.php?search=A+Gray+Sky">[A Gray Sky]</a> and <a href="search.php?search=Sophomore+Effort">[Sophomore Effort]</a>. 
+0

私はあなたが質問のこのビットが「私は私を与えるために誰かを求めていないよ読んでいないと思いますコード: ") –

+1

確かに私はしませんでしたが、私がしたとしても - 私はそれのように感じた;) – ccKep

+0

@ccKep ...聖なる牛!コーダーの間で神! D – juanitojuandejuanes

関連する問題