2016-12-05 5 views
2

Dieser Code gibt keine Übereinstimmungen zurück, wenn ich "szukaj/zwierzęta" in den URL-Pfad eingeben, aber wenn ich "szukaj/zwierzeta" eingeben, funktioniert es.PHP Regex nicht mit polnischen Zeichen

<?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) 
     } 
    } 
} 

ich auch versucht, mit 'zu' => "/ szukaj/('query' [\ pL | \ pN -] +?)",

aber es hat nicht funktioniert.

+1

Versuchen Hinzufügen Unicodeflag '' am Anfang Ihrer regex. Wenn es nicht funktioniert, versuchen Sie das Hinzufügen von "u" flag –

Antwort

0

Sie können [a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ-] verwenden, um alle a-zA-Z und Beläge zu polieren. Hier

ist die Verwendung in Ihrem Code:

<?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) 
     } 
    } 
} 

Und regex101 Beispiel: (u)
https://regex101.com/r/F0uiDE/1

+0

Ja, ich habe gerade das getan, aber jetzt möchte ich zu dieser Abfrage auch das + Zeichen, wie in url Ich habe: "zwierzęta + są" gibt keine Übereinstimmungen, zwierzęta does und są auch – buli

+0

Können Sie das Beispiel der URL geben? Ich bin mir nicht sicher, dass ich verstehe – Dekel

+0

szukaj/zwierzęta + są + inne auf diesem regex101.com funktioniert es, in php tut es nicht. mit diesem: '\/szukaj \/(? 'Abfrage' [a-zA-Z \ + ąćęłńóśźżŁŁÓÓŃŹŻ -] +)' – buli

Verwandte Themen