Русские буквы в именах файлов
Материал из 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
Все и так работает.