2011-09-13 11 views
1

、ここでこのコードを持っている:PHPのstr_replace問題

$search = array('{POST}', '{post}'); 
$replace = $recent['body']; 
$message = str_replace($search, $replace, html_entity_decode($params['post_html'])); 

$params[post_html']はそれを取得した後、例えば、{POST}または{ポスト}定義のいずれかを持つユーザ入力を保持する変数は、このような可能性がありますofcourseのデコード:

<span class="upperframe"> 
    <span></span> 
</span> 
<div class="roundframe dp_control_flow"> 
{POST} 
</div> 
<span class="lowerframe"> 
    <span></span> 
</span> 

はとにかく、私はここに直面してる問題は、何らかの理由で、str_replaceも交換され、交換するパラメータ内{POST}または{post}文字列、次のとおりです。$recent['body']これはどのように私はFIができ、起こるべきではありません交換する必要があるものの交換を実行しないようにするには{POST}または{post}

私は、この関数がreplace変数内で置き換えを行うとは思いませんでした。 OUCH。これを回避する方法はありますか?代わりにpreg_replaceを使用する必要がありますか?もしそうなら、誰かがこれのための正規表現で私を助けることができますか?

みんなありがとう:)

+0

あなたの配列には 'POST'と 'post'の両方が含まれていますので、どちらかがあればそれが置き換えられます。 – Drewdin

+0

はい、なぜ置き換えパラメータ内で置き換えられますか?私には、それは主題のパラメタの中でのみ置き換えるべきです。私はちょうどそれらの1つに行くだろうと思う...とにかくありがとう。 – SoLoGHoST

+0

私はあなたがそれを使ってpreg_matchを行うことができると思いますが、それは奇妙な動作のように見えます – Ben

答えて

1

使用str_ireplace()あなたは、検索のための配列を必要としないと問題が解決されます。

$recent['body']="*test* {post} *test*"; 
$params['post_html']="foo {POST} bar"; 


//$search = array('{POST}', '{post}'); 
$search = '{post}'; 
$replace = $recent['body']; 
$message = str_ireplace($search, $replace, html_entity_decode($params['post_html'])); 

echo $message; 


//with array 
// foo *test* *test* {post} *test* *test* bar 

//without 
//foo *test* {post} *test* bar 
+0

ええええええええええええええええええええ、このPHP 5互換の唯一のものです、私も古いPHPをサポートしようとしています。それはとにかくすべてが良いです、あなたにあなたの試みのための有用な答えを与えるでしょう。私は '{POST}'のみを使うように変更しました。 – SoLoGHoST

+0

古いphp versiosnは "PHP 4のサポートは2007年12月31日以降中止されました"とサポートされるべきではありません。 –

+0

これはわかりませんでした。乾杯:) – SoLoGHoST