2016-12-05 46 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