2016-12-05 3 views
2

Этот код не возвращает совпадений, когда я набираю «szukaj/zwierzęta» в URL-адресе, но когда я печатаю «szukaj/zwierzeta», он работает.PHP Regex не соответствует польский символов

<?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/('запрос' [\ рь | \ пН -] +?)",

, но это не сработало.

+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 пример: (? У)
https://regex101.com/r/F0uiDE/1

+0

Да, я просто сделал это, но теперь я хочу, чтобы этот запрос также включал знак +, как и в url, который у меня есть:« zwierzęta + są »не возвращает совпадений, zwierzęta is and są также – buli

+0

Можете привести пример URL-адреса? Я не уверен, что понимаю – Dekel

+0

szukaj/zwierzęta + są + inne на этом regex101.com это работает, в php это не так. используя это: '\/szukaj \/(? 'query' [a-zA-Z \ + ąćęłńóśźżĄĆĘŁŃÓŚŹŻ -] +)' – buli

Смежные вопросы