Я использую маршрутизатор сегмента в качестве дочернего элемента одного из моих основных маршрутов Literal в приложении ZF2 (в настоящее время использующем 2.3.5). Маршрутизатор должен иметь возможность обрабатывать турецкие символы ввода, поступающие с URL-адреса. Моя первая попытка выглядела примерно так (в качестве детского маршрута):
'book' => array( 'type' => 'Zend\Mvc\Router\Http\Segment', 'options' => array( 'route' => 'kitap/:book[/]', 'constraints' => array( 'book' => '[a-zA-ZçÇşŞğĞıİöÖüÜ1-3.+ ]+', ), ), ),
Это в основном работало на все, что мне было нужно: буквы верхнего и нижнего регистра, цифры до 3 и т. Д. Затем я заметил, что он не принял турецкую столицу, усеянную точками (İ), поэтому я начал проверять. На самом деле, он вообще не принимает никаких турецких символов, хотя остальные части, похоже, обрабатываются должным образом.
Даже с использованием \w+
похоже не соответствует (locale не настроен на турецкий?), Но с использованием \S+
делает так, что у маршрутизатора нет проблем с турецкими URL-адресами, это просто совпадение, которое ударяется.
Я просмотрел исходный код для маршрутизатора Segment и, похоже, использует preg_match()
, который должен обрабатывать это как раз. Что мне здесь не хватает?
Изменить : этот вопрос касается одной и той же проблемы, но в маршрутизаторе Regex. Это еще более тесно связано с той же проблемой в маршрутизаторе сегментов и почти дублирует, но это не решает мою проблему, поскольку продемонстрированный код противоречит старой версии ZF2 и не является ни падением в матче, ни я не был способный переносить его на работу против обновленного модуля восходящего потока, который, по-видимому, обрабатывает вещи по-другому. Я также подал сообщение об ошибке вверх по течению, надеясь, что там будет исправлено, но я все еще остаюсь без действующего модуля. Я счастлив создать модуль замены для моего проекта с этой функцией, исправленной, но я не могу определить изменения, чтобы заставить его работать.