2012-01-20 77 views
1

如何允許在codeigniter中配置西里爾字符?在codeigniter中路由西里爾字符

+2

我剛剛算過:你已經收到了** 12 **的答案,你已經提出了** 10 **問題。 **並且您已被接受**。在提出更多問題之前,請先接受一些答案。 – rdlowrey

回答

0

在文件application/config/config.php找到$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';,並添加有每一個允許的字符 - 例如:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-абвгдеёжзийклмнопрстуфхцчшщъыьэюя'; 
+0

爲什麼不只是'а-я'? – J0HN

+0

PHP的正則表達式不支持。我想沒有一種編程語言可以。有些語言支持[unicode](http://www.regular-expressions.info/unicode.html)。 – kuboslav

+1

哦,真的嗎? '$ str =「яаафаф」;的preg_match( 「([а-я] *)」,$海峽,$匹配); var_dump($ matches);'給我'array(1){[0] => string(6)「яаафаф」}'win7x86,PHP 5.2.12-ts,Apache 2.0.53 – J0HN

2

比方說,比如你有以下途徑:

controller/action/someId 

現在讓我們說你控制器你想成爲контролер(以西里爾文或任何其他字母表,所以你得到:

контролер/action/someId 

顯然,你不能命名Controller類Контролер」,所以你必須去做槽的application/config/routes.php文件

可悲的是,如果你去那裏,類型:

$route['контролер/action/(:num)'] = "controller/action/$1"; 

匹配的路線,Codeigniter將不會使用控制器但會引發錯誤。

我花了一些時間來了解,笨得到一個編碼的URL的東西看似%5%6%77%24

所以你必須有它在你的路線也編碼的編碼字符串相匹配。 php

你能做到這一點,並保持代碼的可讀性,如果你進入這樣的路線:

$route[rawurlencode('контролер').'/action/(:num)'] = "controller/action/$1"; 

這將編碼的非拉丁字符的URL的一部分,你應該使用也鏈接,只是爲了確保所有平行並且不沿線某處如此失敗:

<?php echo site_url(rawurlencode('контролер').'/action/'.$id); ?> 

希望它能幫助!它對我來說是完美無缺的))