嘿我的路由脚本不能使用特殊字符,我不知道为什么或如何解决它。
我的网址:/test/x/hállò/123
我的路由器添加了URL:/ test /:varx /:variableZ / 123
$route['url'] ="/test/x/:name/123";
$reqMet = $_SERVER['REQUEST_METHOD'];
$route['method'] = "GET";
$reqUrl = "/test/x/hállò/123";
$matches = Array();
$pattern = "@^" . preg_replace('/\\\:[a-zA-Z0-9\_\-]+/', '([a-zA-Z0-9\-\_]+)', preg_quote($route['url'])) . "$@D";
if($reqMet == $route['method'] && preg_match($pattern, $reqUrl, $matches)) {
echo "THIS SHOULD BE THE OUTPUT";
}
所以它没有使用像lòl或Háy这样的词,但我找回了正确的Url,但像article / test / 123这样的东西都很完美。
希望有人能帮到我。 感谢
所以这是有效的
$router->addRoute('GET','/test/x/hállò/123','home/main',false);
网址>> http://localhost/test/x/hállò/123
但这不是
$router->addRoute('GET','/test/x/:name/123','home/main',false`);
网址>> http://localhost/test/x/hállò/123
:name用于可替换的变量,如Article id或者无论如何。
答案 0 :(得分:1)
虽然看起来您可能需要包含其他几个带重音和/或非英语的字母,但我只会包含您提到的字母。
替代且超宽松的模式(可能不够安全)将是\\\:[^\/]+
代码:
$route['url'] ="/test/x/:name/123";
$reqUrl = "/test/x/hállò/123";
echo "Input:\n";
var_export(preg_quote($route['url']));
$pattern="@^".preg_replace('/\\\:[a-zA-Z0-9áò_-]+/','([a-zA-Z0-9áò_-]+)',preg_quote($route['url']))."$@D";
// ^^ new letters here: ^^
if(preg_match($pattern, $reqUrl, $matches)) {
echo "\n\nOutput\n";
var_export($matches);
}else{
echo "\n\nNo Match";
}
显示器:
Input:
'/test/x/\\:name/123'
Output
array (
0 => '/test/x/hállò/123',
1 => 'hállò',
)