我在 ZF2(当前使用 2.3.5)应用程序中将Segment 路由器用作我的主要文字路由之一的子级。路由器需要能够处理来自 URL 的土耳其语输入字符。我的第一次尝试看起来像这样(作为子路线):
'book' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => 'kitap/:book[/]',
'constraints' => array(
'book' => '[a-zA-ZçÇşŞğĞıİöÖüÜ1-3.+ ]+',
),
),
),
这主要适用于我需要的所有内容:大写和小写字母,最多 3 位的数字等。然后我注意到它不接受土耳其大写字母i's (İ),所以我开始检查。它实际上根本不接受任何土耳其字符,即使其余的位似乎已正确处理。
即使 using\w+
似乎不匹配(语言环境未设置为土耳其语?),但 using\S+
确实如此路由器对土耳其语 URL 没有问题,只是匹配被破坏了。
我查看了 Segment 路由器的源代码,它似乎正在使用preg_match()
,它应该可以很好地处理这个问题。我在这里想念什么?
编辑: 这个问题是关于同样的问题,但在正则表达式路由器中。这个更密切相关的一个处理 Segment 路由器中的相同问题并且几乎是重复的,但它并没有解决我的问题,因为演示的代码是针对旧版本的 ZF2 并且既不是匹配下降,我也不是能够将其移植到更新的上游模块,该模块似乎处理事情有点不同。我还提交了一份上游错误报告,希望能在那里得到修复,但我仍然没有一个当前工作的模块。我很高兴为我的项目创建一个替换模块,并修补了此功能,但我无法弄清楚使其工作的更改。