0

値とリンクの配列があり、コンテンツ内の正確な値をリンクで 1 回だけ置き換える必要があります。この preg_replace の場合、次のように役立ちます。

Array ( 
[0] => Array ( [keyword] => this week [links] => http://google.com ) 
[1] => Array ( [keyword] =>this [links] => http://yahoo.com ) 
[2] => Array ( [keyword] => week [links]=> http://this-week.com ) ) 
) 

テキストは次のとおりです。

$content = "**This week** I'd like to go to the seaside, but the weather is not good enough. Next **week** will be better. **This** is a kind of great news.**This week** I'd like to go to the seaside, but the weather is not good enough. Next **week** will be better. **This** is a kind of great news.**This week** I'd like to go to the seaside, but the weather is not good enough. Next **week** will be better. **This** is a kind of great news.";

文字列の置換に配列を使用できるため、文字列の置換を試みましたが、すべての出現箇所が置換されます。位置を指定して substr_replace を使用しようとしましたが、思い通りに動作しません。

$pos = strpos($content,$keyword);
if($pos !== false){
    substr_replace($content,$link,$pos,strlen($keyword));
}

および preg_replace で、ループ配列を使用:

preg_replace('/'.$keyword.'/i', $link, ($content),1);

それは一種の機能であり、キーワードをリンクで1回だけ置き換えますが、キーワードが複合(今週)の場合、これに置き換えられますが、これは間違っています...

助けていただければ幸いです...ありがとう。

アップデート

$link が問題です - 「http://」がなくても問題なく動作します...これは問題です。エスケープする方法は...

4

3 に答える 3

1

リンクの代わりにある種の「ID」を使用し、それを preg_replace で使用するとどうなりますか?これが完了したら、str_replace を呼び出して ID を実際のリンクに置き換えることができます。

$content = preg_replace('/'.$keyword.'/i', $IDS, ($content),1);
$content = str_replace($IDS, $link, $content);
于 2013-06-20T16:39:48.123 に答える
1

ロバートの答えは機能しますが、必要ではなかったすべての出現を置き換えます。preg replace の末尾に ', 1' を追加すると、各出現箇所が 1 回だけ置換されます。

例 echo preg_replace($patterns, $replacement, $content, 1);

于 2013-06-20T13:33:57.417 に答える
1

すべての値を置き換えるコードのサンプルを書きます。テキストを正確に何に置き換えたいのかわからないので、サンプルテキストを入れます

 $content = "**This week** I'd like to go to the seaside, but the weather is not good enough. Next **week** will be better. **This** is a kind of great news.**This week** I'd like to go to the seaside, but the weather is not good enough. Next **week** will be better. **This** is a kind of great news.**This week** I'd like to go to the seaside, but the weather is not good enough. Next **week** will be better. **This** is a kind of great news.";
 $replacement = array('[linkthiswWeek]', '[links_this]','[links_Week]');
 $patterns = array('/This week/', '/This/', '/week/');
 echo preg_replace($patterns, $replacement, $content);

出力:

**[linkthiswWeek]** I'd like to go to the seaside, but the weather is not good enough. Next **[links_Week]** will be better. **[links_this]** is a kind of great news.**[linkthiswWeek]** I'd like to go to the seaside, but the weather is not good enough. Next **[links_Week]** will be better. **[links_this]** is a kind of great news.**[linkthiswWeek]** I'd like to go to the seaside, but the weather is not good enough. Next **[links_Week]** will be better. **[links_this]** is a kind of great news.

$replacement配列を変更することで、ニーズに合わせて交換できます

于 2013-06-20T13:20:48.663 に答える