2016-12-05 8 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の| \ pNで - ] +?)" を試してみました、

が、それはうまくいきませんでした。

+1

してみてください。それが動作しない場合、 '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

ええ、私はちょうどそれをやったが、私はそのクエリにも、私は持っているように+記号を含めるようにしたい:"zwierzęta+są "一致、zwierzęta doesとsąも – buli

+0

URLの例を挙げることはできますか?私は理解しているとは分かりません – Dekel

+0

szukaj /zwierzęta+są+ inne そのregex101.comで動作しますが、PHPでは動作しません。これは: '\/szukaj \ /(? 'query' [a-zA-Z \ +†ćłńóśźżĆ]ŃŚŚŻ - ] +)' – buli

関連する問題