查找并替换字符串中的多个值

时间:2015-01-29 07:57:17

标签: php

我从不同的服务器获取数据,并且还有一个帖子的字符串(标题),它也传递给我的服务器。我试图过滤掉不需要的空格和字符,但它似乎不起作用。我做的代码是

$find = array("%"," ","&","%20");
$replace = array("-");
$post_filtered_name=strtolower(str_replace($find,$replace,$post_title));

但是我得到了结果

benten

而不是我应该

ben-ten

5 个答案:

答案 0 :(得分:2)

请参阅此处有关参数的部分:

http://php.net/manual/en/function.str-replace.php

  

如果搜索和替换是数组,则str_replace()接受一个值   从每个数组中使用它们来搜索和替换主题。 如果   replace比搜索值少,然后使用空字符串   其余的替换值

然而:

  

如果搜索是一个数组,则替换为a   string,然后这个替换字符串用于每个值   搜索。但是反过来没有意义。

所以相反:

$replace = array("-");

只需使用:

$replace = "-";

答案 1 :(得分:1)

试试这个:

$replace = "-";

而不是

$replace = array("-");

答案 2 :(得分:1)

由于您只有一个替换所有针,不要使它成为一个阵列。将它作为一个字符串传递,休息已经很好了。

$replace = "-";

<强> Fiddle

这也可以从PHP Manual

确认
  

如果搜索和替换是数组,则str_replace()从每个数组中获取一个值,并使用它们来搜索和替换主题。如果replace的值小于search,则空字符串将用于其余的替换值。 如果search是数组且replace是字符串,则此替换字符串将用于搜索的每个值。但是反过来没有意义。

答案 3 :(得分:0)

在转换字符串时尝试此操作:

$post_title="ben  ten%20Hero";
$post_filtered_name=strtolower(preg_replace('/(\%|\s)+/', '-', urldecode($post_title)));

echo $post_filtered_name;

答案 4 :(得分:0)

您尝试通过传递数组$find从字符串中过滤掉许多不需要的和额外的字符。因此,您还必须单独为每个搜索元素提供替换字符串。

所以在这里你必须替换这个

$replace = array("-");

$replace = array("-","-","-","-");

$find$replace中的索引数必须相同。