PHP str_replace问题

时间:2011-09-13 02:40:56

标签: php preg-replace str-replace

好的,请在此处输入此代码:

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

$params[post_html']是一个变量,用于保存定义了{POST}或{post}的用户输入,例如可能是这样的,在它被解析之后:

<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']不应该发生,我该如何解决这个问题,以便它不会对需要替换{POST}{post}的东西进行替换?

我没想到这个函数会在replace变量中替换。哎哟。有没有解决的办法?我是否必须使用preg_replace?如果是这样,有人可以为我提供正则表达式吗?

谢谢你们:)

1 个答案:

答案 0 :(得分: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