如何允许在codeigniter中路由cyrillic字符?
例如,假设您有以下路由:
controller/action/someId
现在让我们说你的控制器你想成为конралер(用西里尔字母或任何其他字母,所以你得到:
контролер/action/someId
显然,您不能将控制器类命名为"Конрилер",因此必须通过application/config/routes.php进行命名
遗憾的是,如果你去那里并键入:
$route['контролер/action/(:num)'] = "controller/action/$1";
为了匹配路由,Codeigniter将不使用控制器,但会抛出一个错误。
我花了一些时间才明白,Codeigniter得到了一个编码的URL,看起来像%5%6%7%24
因此,为了匹配编码的字符串,您必须在routes.php.中对其进行编码
你可以这样做,并保持代码可读性,如果你进入这样的路线:
$route[rawurlencode('контролер').'/action/(:num)'] = "controller/action/$1";
这将对URL的非拉丁字符部分进行编码,你也应该在链接中使用它,只是为了确保所有内容都是并行的,并且不会在某个地方失败,所以:
<?php echo site_url( rawurlencode('контролер').'/action/'.$id ); ?>
希望它能有所帮助!它完美地为我工作:))
在文件application/config/config.php
中找到$config['permitted_uri_chars'] = 'a-z 0-9~%.:_'-';
,并在其中添加每个允许的字符,例如:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_'-абвгдеёжзийклмнопрстуфхцчшщъыьэюя';