我正在使用以下代码来分割传入的请求:
/*
* Create global $GET from our cool URL's
*/
preg_match_all('/[\/|\?|\&]([a-zA-Z\_0-9]+)([\/|=]([0-9]+)){0,1}/', $_SERVER['REQUEST_URI'], $parts, PREG_PATTERN_ORDER);
if( count($parts[1]) >= 1 && count($parts[3]) >= 1)
$GET = array_combine($parts[1], $parts[3]);
网址如“/ cat / 2 / post / 345 / answer / post”分为:
cat => 2
post => 345
answer =>
post =>
是否可以更改此正则表达式以允许以下网址:/ post / 345-title-goes-here /并将其转换为:
post => 345-title-goes-here
因为现在它只有在参数严格为0-9且没有其他字符时才有效。甚至那对我来说也是一个真正的问题。有什么建议? :)
答案 0 :(得分:1)
当然,而不是:
'/[\/|\?|\&]([a-zA-Z\_0-9]+)([\/|=]([0-9]+)){0,1}/'
尝试:
'/[\/|\?|\&]([a-zA-Z\_0-9]+)([\/|=]([0-9]+[a-zA-Z_-]*)){0,1}/'
我刚刚在0-9之后添加了一个可选(0或更多)设置中的额外字符。
答案 1 :(得分:1)
我会使用更简洁的一个:
#[/?&](\w+)([/=](\d[\w-]+))?#
所以preg_match_all
变为:
preg_match_all('#[/?&](\w+)([/=](\d[\w-]+))?#', $_SERVER['REQUEST_URI'], $parts, PREG_PATTERN_ORDER);
根据评论更新:
#[/?&]([\w.()-]+)([/=](\d[\w.()-]+))?#
您可以在角色类中添加所需的每个角色。