我正在尝试替换具有特定参数的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);
答案 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);