我遇到了从url检索括号值的问题。我正在使用CodeIgniter Framework开发一个PHP项目。
我有像这样的mvc网址格式 - http://localhost/controller/action/id/name
然后我传递了这样的值 - http://localhost/controller/action/2/test%20(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上运行不正常。我正确显示输出。但是找不到它的索引。
答案 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];