Php preg_match 没有和 óá 一起工作
Php preg_match not working with óá
嘿,我的路由脚本无法处理特殊字符,我不知道为什么或如何修复它。
我的Url:/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);
URL >> http://localhost/test/x/hállò/123
但这不是
$router->addRoute('GET','/test/x/:name/123','home/main',false`);
URL >> http://localhost/test/x/hállò/123
:name 用于可替换的变量,如 Article id 或 whatever.
虽然您可能需要包括其他几个带重音符号的 and/or 非英语字母,但我只会包括您提到的字母。
另一种超级宽松的模式(可能不够安全)是 \\:[^\/]+
代码:
$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ò',
)
嘿,我的路由脚本无法处理特殊字符,我不知道为什么或如何修复它。
我的Url:/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);
URL >> http://localhost/test/x/hállò/123
但这不是
$router->addRoute('GET','/test/x/:name/123','home/main',false`);
URL >> http://localhost/test/x/hállò/123
:name 用于可替换的变量,如 Article id 或 whatever.
虽然您可能需要包括其他几个带重音符号的 and/or 非英语字母,但我只会包括您提到的字母。
另一种超级宽松的模式(可能不够安全)是 \\:[^\/]+
代码:
$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ò',
)