Вопрос PHP str_replace - PullRequest
       4

Вопрос PHP str_replace

1 голос
/ 13 сентября 2011

Хорошо, вот этот код:

$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} строки в параметре replace: $recent['body'] ЭТОГО НЕ должно происходить, как я могу исправить это так, что он не выполняет замену вещи, которая должна заменить {POST} или {post}?

Я не ожидал, что эта функция будет выполнять замены внутри переменной replace. УЧ. Это можно обойти? Должен ли я использовать preg_replace вместо этого? Если да, может ли кто-нибудь помочь мне с регулярным выражением для этого?

Спасибо, ребята:)

1 Ответ

1 голос
/ 13 сентября 2011

используйте 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
...