多个str_replace?

时间:2012-10-07 22:33:17

标签: php

我正在尝试替换具有特定参数的CodeIgniter中的URL。并不是CI在这一点上应该是重要的,因为我有最好的工作。

让我说我的网址是:

?device=field1-field2_field3+field4

通过回显$ devicelink2应该显示:

field1 field2.field3*field4

目前它适用于除了替换+之外的所有内容。由于某种原因,它用空格替换+。

但是我无法使用下面的代码。有什么想法吗?

    $device = $this->input->get('device');
    $devicelink = str_replace("-"," ",$device);
    $devicelink1 = str_replace("_",".",$devicelink);
    $devicelink2 = str_replace("+","*",$devicelink1);

3 个答案:

答案 0 :(得分:6)

查询字符串中的

+实际上表示一个空格字符,所以使用这个(非常奇怪的)查询字符串:

?device=field1-field2_field3+field4

$this->input->get('device')等于field1-field2_field3 field4

要回答有关如何使用此确切查询字符串获取所需输出的文字问题:

$device = $this->input->get('device');
$devicelink = str_replace(" ", "*", $device);
$devicelink1 = str_replace("_", ".", $devicelink);
$devicelink2 = str_replace("-", " ", $devicelink1);

或者:

$devicelink2 = str_replace(array(' ', '_', '-'), array('*', '.', ' '), $device);

如果您在将这些字符放入原始查询字符串时遇到问题,请确保对其进行正确编码:

?device=field1+field2.field3%2Afield4

请参阅PHP的原生urlencode函数以获取有关此问题的帮助:http://php.net/manual/en/function.urlencode.php

答案 1 :(得分:0)

试试这个:

$search  = array('-', '_', '+');
$replace = array(' ', '.', '*');
$subject = $this->input->get('device');

$deviceLink = str_replace($search, $replace, $subject);

答案 2 :(得分:0)

str_replace很好地接受数组。 str_replace(数组('她','爱','我'),数组('他','讨厌','你'),'她爱我而不是你');

str_replace将返回“他恨你不是你”。 (可怕的例子吧?)

如果输入要搜索的数组并将字符串作为替换,它将使用hay堆栈中的给定字符串替换所有数组值。

或者,如果您输入2个具有相同元素数量的数组,则'search'数组中的元素将替换为其各自的替换值。

$ devicelink = str_replace(array(' - ','_','+'),array('','。','*'),$ device);