Php 正在处理URL参数-用斜杠分隔的名称-值对
我希望有如下URL:-Php 正在处理URL参数-用斜杠分隔的名称-值对,php,url,url-rewriting,url-routing,mod-rewrite,Php,Url,Url Rewriting,Url Routing,Mod Rewrite,我希望有如下URL:- URL 1 - www.projectname/module/search/param/1 URL 2 - www.projectname/param/1/module/search 我想要一个PHP代码,它将上述URL作为参数,并返回一个数组,如 Array("module" => "search", "param" => 1) (for URL 1) Array("param" => 1, "module" => "search"
URL 1 - www.projectname/module/search/param/1
URL 2 - www.projectname/param/1/module/search
我想要一个PHP代码,它将上述URL作为参数,并返回一个数组,如
Array("module" => "search", "param" => 1) (for URL 1)
Array("param" => 1, "module" => "search") (for URL 2)
这样我就可以在项目中使用$u GET时的结果。我知道用PHP做这件事比用htaccess重写规则更好更容易。如果您可以帮助重写规则,也请帮助
可以有任意数量的参数
我从CodeIgniter的URL处理库中得到了这个想法。但是我的项目不在Codeigniter上,所以我不能使用那个库。有没有独立的代码可以做到这一点
提前感谢使用PHP函数
解析url
因此,您可以分析数组的路径
部分
然后使用explode
将项目放入关联数组?使用php函数。您必须解析结果,并查看$result是否是应用程序中的有效模块,等等。解析器的逻辑应该属于您的应用程序。有人提到的Zend_路由器也做了同样的事情,它试图映射到现有的模块/控制器/操作,不管它有什么$request对象
$result = explode('/', $string);
这里有一个函数来完成这项工作。注意,我已经填写了url,因为
parse\uURL
需要该方案。对于格式严重错误的URL,它也会失败
function get_dispatch($url) {
// Split the URL into its constituent parts.
$parse = parse_url($url);
// Remove the leading forward slash, if there is one.
$path = ltrim($parse['path'], '/');
// Put each element into an array.
$elements = explode('/', $path);
// Create a new empty array.
$args = array();
// Loop through each pair of elements.
for( $i = 0; $i < count($elements); $i = $i + 2) {
$args[$elements[$i]] = $elements[$i + 1];
}
return $args;
}
print_r(get_dispatch('http://www.projectname.com/module/search/param/1'));
print_r(get_dispatch('http://www.projectname.com/param/1/module/search'));
然而,这可能不是很可靠。如果有一个写得很好的图书馆已经完成了这项工作(就像Itay Moav所建议的那样),那么你肯定应该研究它
$url = parse_url('http://www.projectname.com/module/search/param/1');
$params = explode('/', trim($url['path'], '/'));
$params = array_chunk($params, 2); //tricky part here
foreach($params as $param)
{
$final_params[$param[0]] = $param[1];
}
编辑:解析url仅适用于正确的url
是一个很好的函数:)我相信Zend_Router(检查拼写错误)可以从ZF中分离出来并用于此目的。@Georg Schölly:谢谢您的编辑。我忘了l/trim可以去除其他字符。你真的应该感谢第一次编辑的匿名用户,我没有做太多更改。:)
Array
(
[module] => search
[param] => 1
)
Array
(
[param] => 1
[module] => search
)
$url = parse_url('http://www.projectname.com/module/search/param/1');
$params = explode('/', trim($url['path'], '/'));
$params = array_chunk($params, 2); //tricky part here
foreach($params as $param)
{
$final_params[$param[0]] = $param[1];
}