2016-12-05 107 views
2

当我在url路径中键入“szukaj /zwierzęta”时,此代码不会返回任何匹配项,但是当我键入“szukaj/zwierzeta”时,它将起作用。PHP正则表达式不匹配波兰语字符

<?php 
$url = "http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"; 
$rules = array( 
    'film' => "/film/(?'film_slug'[^/]+)-(?'film_id'\d+)", 
    'szukaj' => "/szukaj/(?'query'[\w\-]+)", 
); 

foreach ($rules as $action => $rule) { 
    if (preg_match('~^'.$rule.'$~i', $uri, $params)) { 
     switch($action) 
     { 
      case 'szukaj': (doesn't work with ęąćźż, works with others) 
     } 
    } 
} 

我也试图与 'szukaj'=> “/ szukaj /( '查询'[\ PL | \对-N - ] +?)”,

,但没有奏效。

+1

尝试增加unicode的标志''在你的正则表达式的开始。如果它不起作用尝试添加'u'标志 –

回答

0

您可以使用[a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ-]来加工任何a-zA-Z 任何波兰特殊字符。

这里是你的代码中使用:

<?php 
$url = "http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"; 
$rules = array( 
    'film' => "/film/(?'film_slug'[^/]+)-(?'film_id'\d+)", 
    'szukaj' => "/szukaj/(?'query'[+a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ-]+)", 
); 

foreach ($rules as $action => $rule) { 
    if (preg_match('~^'.$rule.'$~i', $uri, $params)) { 
     switch($action) 
     { 
      case 'szukaj': (doesn't work with ęąćźż, works with others) 
     } 
    } 
} 

而且regex101例如:(?U)
https://regex101.com/r/F0uiDE/1

+0

是的,我只是做到了这一点,但现在我想要那个查询还包括+符号,就像我在URL中:“zwierzęta+są”不返回匹配,zwierzęta并且也可以 – buli

+0

你能举出URL的例子吗?我不确定我是否理解 – Dekel

+0

szukaj /zwierzęta+są+ inne 它在regex101.com上有效,在php中它没有。使用这个: '\/szukaj \ /(?'query'[a-zA-Z \ +ąćęłńóśźżĄĆĘŁŃÓŚŹŻ+]' – buli