Русские буквы в именах файлов

Материал из 1GbWiki.

(Различия между версиями)
Перейти к: навигация, поиск
Версия 13:46, 12 августа 2009 (править)
Renton (Обсуждение | вклад)
(Новая: == Общие сведения == Каждый web-мастер должен знать, что использовать русские буквы в названиях файлов '''...)
← К предыдущему изменению
Версия 12:27, 20 ноября 2009 (править) (отменить)
Dmih (Обсуждение | вклад)
м
К следующему изменению →
Строка 50: Строка 50:
* [[Юникс шелл]] * [[Юникс шелл]]
* [[WinSCP безопасная альтернатива FTP]] * [[WinSCP безопасная альтернатива FTP]]
 +
 +[[Категория:UNIX]]
 +[[Категория:Shell]]
 +[[Категория:WEB-сервер Apache]]

Версия 12:27, 20 ноября 2009

Содержание

Общие сведения

Каждый web-мастер должен знать, что использовать русские буквы в названиях файлов нельзя,

<a href="/мой_котик.jpg">котеночек</a>

вы обязательно столкнетесь со множеством проблем, в том числе и проблем совместимости "кода - хостинг". Но мы то знаем, что если что-то нельзя, но хочется, значит можно. В статье пойдет речь об использовании русских букв в названиях файлов на различных платформах.

UNIX

Все современные обозреватели по-умолчанию передают URI на сервер в кодировке UTF-8 и web-сервер Apache оперирует с файлами в той кодировке, в которой пришел запрос. Поэтому, вам достаточно, при создании файла с русскими буквами использовать кодировку UTF-8 и без каких-либо дополнительных настроек все будет работать.

Как это сделать.

  • если вы работаете с файлами через SSH, то в ~/.bashrc добавьте:
export LANG=ru_RU.utf8

файлы будут создаваться в правильной кодировке.

  • если через FTP/WinSCP из Windows, то файлы создаются всегда в windows-1251. Перекодировать их можно с помощью такой команды, выполненной в консоле SSH:
cd ~/http && for FN in `find . -type f`; do NEW_FN=`echo $FN | iconv -f cp1251 -t utf8`; if [ "${FN}" != "${NEW_FN}" ]; then mv ${FN} ${NEW_FN}; fi; done

Пример: http://unix.1gb.ru/котеночек.jpg

Windows

Apache

Аналогично UNIX'у, только перекодировать имена файлов нужно через какой-то скрипт. Пример на PHP:

function convert_files ($start_dir='.') {

    $files = array();
    if (is_dir ($start_dir)) {
        $fh = opendir ($start_dir);
        while (($file = readdir ($fh)) !== false) {
            if (strcmp ($file, '.')==0 || strcmp ($file, '..')==0) continue;
            $filepath = $start_dir . '/' . $file;
            if (is_dir ($filepath) )
                $files = array_merge ($files, convert_files ($filepath));
            $new_filepath = iconv ('cp1251', 'utf-8', $filepath);
            if ($filepath !== $new_filepath)
                rename ($filepath, $new_filepath);
        }
    closedir($fh);
    } else {
        $files = false;
    }

    return $files;
}

$files = convert_files('.');

IIS

Все и так работает.

См. также

Личные инструменты