2010-12-04 9 views
0

Ich verwende das Routing-System von Kohana für meine eigene Anwendung, und wenn ich das pcre-Muster für ein Tag der URL definiere, verhält sich mein localhost anders als der Produktionsserver.PCRE: Anderes Verhalten für w auf verschiedenen Servern

Ich habe diese Route:

Route::set('list', 'list(/tagged/<tags>)', 
      array('tags'=>'[\w\d\-\+]+')); 

Diese verwendet funktionieren, bis zu dem Tag jemand einen Tag verwendet, die nicht "Standard" Zeichen (ñ) enthalten sind. In meinem localhost gibt es kein Problem, aber im Produktionsserver kann das System die Route nicht finden.

Im Produktionscode muss ich das Muster ändern und explizit 'ñ' zu den erlaubten Zeichen hinzufügen!

'\pL[\w\d\-\+ñ]+' 

Die Frage ist, warum? Ok, es funktioniert jetzt, dass ich das "ñ" hinzugefügt habe, aber es wird früher oder später wieder scheitern!

+0

Kohana verwendet den Modifikator "u" für den Abgleich, daher bedeutet dies wahrscheinlich, dass PCRE nicht mit Unicode-Unterstützung kompiliert wurde oder Sie kein UTF-8-Gebietsschema verwenden. – shadowhand

+0

Ich denke Unicode wird auf dem System unterstützt, weil install.php mir das sagt. Ich wette, die Gebietsschema-Einstellungen @mario wies darauf hin –

Antwort

3

Werfen Sie einen Blick auf die verschiedenen Unicode-Zeichenklassen können Sie hier verwenden: http://www.regular-expressions.info/unicode.html#prop das gesagt ist, werden Sie in der Lage sein, etwas zu verwenden, wie dies:

Route::set('list', 'list(/tagged/<tags>)', array('tags'=>'[\p{L}\p{N}\-\+]+')); 
  1. \p{L} jede Art von Schreiben von jeder Sprache.
  2. \p{N} jede Art von numerischen Zeichen in einem Skript.

Ich habe dies auf ideone.com getestet. View example.

+0

Es hat funktioniert! Ich kannte diese Parameter nicht, danke –

3

Da die Bedeutung von \w länderabhängig ist, hat Ihr Produktionsserver wahrscheinlich ein sauberes C-Gebietsschema, während Ihr Entwicklungssystem erweiterte Zeichencodes enthält.

IIRC mit dem /u Unicode-Modifikator ermöglicht \w, alle "Buchstaben" -Zeichen zu entsprechen. Wenn Kohana das Angeben von Modifikatoren nicht erlaubt, fügen Sie es inline mit (?u)[...] hinzu. Oder vielleicht in Ihrem Fall müssen Sie nur \p{L} innerhalb der eckigen Klammern wiederholen:

'\pL[\w\d\-\+\p{L}]+' 
+0

das Kohana-System beendet das Hinzufügen der/u zum endgültigen Muster, immer noch nicht funktioniert, jedenfalls wusste ich nicht das Gebietsschema Verhalten. –