无法从php中的url检索括号值?

时间:2015-11-13 05:20:49

标签: php codeigniter

我遇到了从url检索括号值的问题。我正在使用CodeIgniter Framework开发一个PHP项目。

我有像这样的mvc网址格式 - http://localhost/controller/action/id/name

然后我传递了这样的值 - http://localhost/controller/action/2/test%20(test)

同样如此 - 然后我传递了这样的值:

  

http://localhost/controller/action/2/test+(test)

所以我的动作函数就是这样的参数 -

function action($id,$name)
{
   $name = urldecode($name)
   //I find the index of start "t"
   echo strpos($name,'t'); //this is working find
   echo strpos($name,'('); // this is outputing nothing
   echo $name; // this is outputing test (test)
}

有什么问题?为什么我找不到"的索引("。实际上是我并使用该值从数据库中检索记录。但是括号在PHP上运行不正常。我正确显示输出。但是找不到它的索引。

3 个答案:

答案 0 :(得分:1)

最后我找到了解决方案。这是Codeigniter Framework的问题。在urlencoding之前,我用“[”和“]”替换了所有“(”和“)”。然后我在urldecoding之后用“(”和“)”替换了所有“[”和“]”。阅读本文后,您将得到答案。 http://qubitlogs.com/PHP/2013/01/24/parentheses-in-urls-not-working-codeigniter-datamapper-orm/。感谢大家的帮助。

答案 1 :(得分:0)

试试这个

<?php
$url = 'localhost/melomap_music/singers/details/760/test%20(test)';
$string = urldecode($url);
$pattern1 = '/[)]/';
$pattern2 = '/[(]/';
preg_match($pattern1, $string, $matches, PREG_OFFSET_CAPTURE);
preg_match($pattern2, $string, $matches2, PREG_OFFSET_CAPTURE);
$start = $matches2[0][1]; //49
$end = $matches[0][1]; //54
?>

答案 2 :(得分:0)

使用preg_match

尝试这样做
<?php
preg_match('/\((.*?)\)/',urldecode($name),$a);
echo $a[1];