Русский язык в URL
Материал из Wiki
Для использования русских символов в URL необходимо в файле конфигурации выставить настройки следующим образом:
$config['permitted_uri_chars'] = '?a-zа-я=\s&0-9~%\.:_-';
Никаких изменений в классах фреймворка не требуется.
При использовании параметров с русскими символами их необходимо декодировать:
function tag($tag = null, $page = 1){
if($tag==null) redirect();
$tag = rawurldecode($tag);
100% решение проблемы русских символов в URL
1. Откройте application/config/config.php, найдите там
$config['permitted_uri_chars'] = '?a-zа-я=\s&0-9~%\.:_-';
измените на
$config['permitted_uri_chars'] = '?A-Za-zА-Яа-я=\s&0-9~%\.:_-';
2. Откройте index.php (в корневой папке) и в самом начале добавьте строку
setlocale(LC_ALL, 'ru_RU.UTF8');
3. В папке application/libraries создайте файл MY_URI.php со следующим содержанием (как предложил Ladygin, только немножко измененное):
<?php
class MY_URI extends CI_URI
{
function _filter_uri($str)
{
if ($str != '' AND $this->config->item('permitted_uri_chars') != '')
{
if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i", rawurlencode($str)))
{
exit('The URI you submitted has disallowed characters.');
}
}
return $str;
}
}
?>
Примечание: Ladygin предложил использовать ключ "u" (поддержку юникода) в качестве модификатора шаблона регулярного выражения для preg_match, т.е.
if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|iu", $str))
rawurlencode в оригинальном коде Codeigniter не используется
4. Все файлы проекта переводим в кодировку UTF-8.
Если вы создаёте новый проект и используете оригинальный дистрибутив Codeigniter, то вам нужно лишь следить, чтобы новые файлы с русскими символами были в кодировке UTF-8. Если у вас уже есть проект в отличной от UTF-8 кодировке, то их нужно конвертировать.