1

我正在尝试替换 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);
4

3 回答 3

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

于 2012-10-07T22:42:12.290 回答
0

试试这个:

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

$deviceLink = str_replace($search, $replace, $subject);
于 2012-10-07T22:41:50.873 回答
0

str_replace 可以很好地接受数组。str_replace(array('she', 'loves', 'me'), array('he' , 'hates', 'you'), '她爱我不是你');

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

如果您输入一个要搜索的数组并输入一个字符串作为替换,它将用干草堆中的给定字符串替换所有数组值。

或者,如果您输入 2 个具有相同数量元素的数组,则“搜索”数组中的元素将被替换为它们各自的替换值。

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

于 2012-10-07T22:46:50.530 回答