Dialer 0 Опубликовано: 30 мая 2008 Рассказать Опубликовано: 30 мая 2008 Поскольку разработчик выпускает релизы только в кодировке win-1251 многим приходится конвертировать дистриб в utf-8 вруную. Вместе с тем, я не смог найти инструкции как это сделать должным образом, поэтому пришлось все делать с нуля. Но, как оказалось, это не так сложно. Ниже публикую алгоритм как это делал я. Для работы нужно иметь программу-перекодировщик. Я использовал Kaboom, потому что в ней есть поддержка всех кодировок и функция пакетной конвертации. Скачать можно тут: http://www.sisulizer.com/kaboom/ 0. Запускаем Kaboom и переходим на вкладку Multi-converter. Вытсавляем там кодировку (win-1251 -> utf-8), убераем птичку Write BOM, ставим Cnahge content-type, ставим Overwrite Source. 1. Скопировать из дистрибутива папку Upload куда-нибудь подальше от оригинала 3. Зайти в эту папку проводником, нажать F3 и сделать поиск задав в строке запроса "*" (без кавычек). Таким образом выведутся все файлы из этой папки. 4. Выделить из полученного списка все файлы кроме картинок и папок (их перекодировать не нужно) и драг-н-дропом перенести в окно Kaboom. 5. Нажимаем Convert, жмем в открывшемся сообщении кнопку OK и ждем окончания процесса конвертации. На этом перекодирование дистрибутива завершено, но нужно еще сделать некоторые изменения в содержмом файлов.. 1. Внести изменения в meta-тэги conten-type некоторых файлов шаблонов. Для этого понадобиться программа автозамены. Я использую Search and Replace (http://www.funduc.com/). Строка для поиска: charset=windows-1251 Заменять на: charset=utf-8 Не забудтье убедиться что замена производится во всех вложенный папках! Для следующих шагов портебуется текстовой редактор с поддеркой UTF-8 (например Editplus). 2. Изменить в файле install.php строку $config['charset'] = "windows-1251"; на $config['charset'] = "utf-8"; 3. В языковых файлах adminpanel.lng и website.lng заменить 'charset' => "windows-1251", на 'charset' => "utf-8", 4. Заменить стандартную функцию транслитерацию, на адаптированную под юникод (это нужно чтобы статьи с русскими названиями получали адекватны ЧПУ). Для этого в файлах /engine/inc/functions.inc.php и /engine/modules/functions.php Заменить стандартную функцию транслитерации function totranslit($var) { ... }на function totranslit($var) { $converter = array( 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => '\'', 'ы' => 'y', 'ъ' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch', 'Ь' => '\'', 'Ы' => 'Y', 'Ъ' => '', 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya', ); $var = str_replace(".php", "", $var); $var = trim(strip_tags($var)); $var = preg_replace( "/\s+/ms", "-", $var ); $var = strtr($var, $converter); $var = preg_replace("/[^a-z0-9\_\-.]+/mi", "", $var); $var=preg_replace('#[\-]+#i', '-', $var); $var = strtolower ( $var ); if (strlen($var) > 50) { $var = substr ($var, 0, 50); if (($temp_max = strrpos($var, '-'))) $var = substr ($var, 0, $temp_max); } return $var; } После проделывания вышеописанных действий, можно заливать файлы на сервер и запускать установку. В процессе установки не забудьте указать кодирку utf-8 для баз! В заключении добавлю, что данный алгоритм проверялся для версии 7.0 для ее первоначалньой установки. Однако я не вижу преград для применения его при обновении скриптов на новую версию. Цитата Ссылка на сообщение Поделиться на других сайтах
Shoma 0 Опубликовано: 30 мая 2008 Рассказать Опубликовано: 30 мая 2008 спасибо! давно интересовался. спасибо! давно интересовался. Цитата Ссылка на сообщение Поделиться на других сайтах
Dialer 0 Опубликовано: 30 мая 2008 Рассказать Опубликовано: 30 мая 2008 Автор Дважды пожалуйста! Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 30 мая 2008 Рассказать Опубликовано: 30 мая 2008 Dialer, молодец!! Цитата Ссылка на сообщение Поделиться на других сайтах
Eagle 0 Опубликовано: 30 мая 2008 Рассказать Опубликовано: 30 мая 2008 Спасибо. А как насчет данной функци??? function convert_unicode($t, $to = 'windows-1251') { $to = strtolower($to); if ($to == 'utf-8') { $t = preg_replace( '#%u([0-9A-F]{1,4})#ie', "decode_to_utf8(hexdec('\\1'))", utf8_encode($t) ); $t = urldecode ($t); } else { $t = preg_replace( '#%u([0-9A-F]{1,4})#ie', "'&#' . hexdec('\\1') . ';'", $t ); $t = urldecode ($t); $t = @html_entity_decode($t, ENT_NOQUOTES, $to); } return $t; } Может есть смысл сделать ей значение по умолчанию не windows-1251 а utf-8 ? Не пинайте, я не программист. Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 30 мая 2008 Рассказать Опубликовано: 30 мая 2008 Eagle, а фиг знает - пробыват ьнадо. Мне думается эта функция вообще не нужна - достаточно будет iconv Цитата Ссылка на сообщение Поделиться на других сайтах
spam 11 Опубликовано: 30 мая 2008 Рассказать Опубликовано: 30 мая 2008 у меня такой вопрос что существенного дает кодировка utf, просто щас делаю сайт, и думаю менять все на utf или нет, что вообще эта фича дает для русскоязычного сайта? Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 31 мая 2008 Рассказать Опубликовано: 31 мая 2008 что вообще эта фича дает для русскоязычного сайта? абсолютно ничего. UTF-8 нужна чтобы одновременно писать на сайте например на русском и китайском. при UTF-8 иероглифы и кирилица на одной странице будет отображатся корректно. А как насчет данной функци??? значения по умолчанию это значения по умолчанию, и не используются если есть другие значения. Например если кодировку не указать в настройках то применится значение по умолчанию, если указать, то от значения ни холодно ни жарко Цитата Ссылка на сообщение Поделиться на других сайтах
Dialer 0 Опубликовано: 31 мая 2008 Рассказать Опубликовано: 31 мая 2008 Автор А как насчет данной функци??? Незнаю что делает данная функция, но раз все работает ОК, то я бы не стал ее трогать. Зачем? Что касается кодировки UTF-8 - IMHO рано или поздно на нее прийдется переходить, поэтому если есть возможность то лучше это сделать сразу, чтобы потом не иметь проблем с конвертацией. Цитата Ссылка на сообщение Поделиться на других сайтах
Greeze 0 Опубликовано: 31 мая 2008 Рассказать Опубликовано: 31 мая 2008 使用百度前必读 京 Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 31 мая 2008 Рассказать Опубликовано: 31 мая 2008 Greeze, это HTML Они занимают больше памяти в 8 раз, хотя для короткого текста никаких проблем. Что касается кодировки UTF-8 - IMHO рано или поздно на нее прийдется переходить, поэтому если есть возможность то лучше это сделать сразу, чтобы потом не иметь проблем с конвертацией. С чего вдруг? UTF-8 не является какой то новой новомодной кодировкой, существует для определенных целей. И переходит на нее рано или поздно не нужно Цитата Ссылка на сообщение Поделиться на других сайтах
Eagle 0 Опубликовано: 1 июня 2008 Рассказать Опубликовано: 1 июня 2008 Например если кодировку не указать в настройках Теперь ясно откуда в функцию значеня берутся. Спасибо. Цитата Ссылка на сообщение Поделиться на других сайтах
freeswap 2 Опубликовано: 12 сентября 2008 Рассказать Опубликовано: 12 сентября 2008 Вот еще чего интересно, в файле install.php есть строка 'charset' => "windows-1251", Нужно ли и тут ставить utf-8 ? Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 13 сентября 2008 Рассказать Опубликовано: 13 сентября 2008 freeswap, это кодировка которая установится в настройки скрипта. Цитата Ссылка на сообщение Поделиться на других сайтах
freeswap 2 Опубликовано: 13 сентября 2008 Рассказать Опубликовано: 13 сентября 2008 Хм, вчера менять не стал, оставил по-дефолту, но в скрипте после установки utf-8 И еще почему то никто не скажет что нужно добавить в .htaccess AddDefaultCharset utf-8 To celsoft Может быть вы переведете дистрибутив на utf-8 по науке и сделаете доступным для скачивания, так же как сверсию cp1251? Цитата Ссылка на сообщение Поделиться на других сайтах
Zergio 0 Опубликовано: 13 сентября 2008 Рассказать Опубликовано: 13 сентября 2008 Если считать что, русский язык - единственный на свете, то UTF и нафиг не нужен, но стоит попробовать использовать любой другой язык (не обязательно китайский), имеющий буквы типа á é í ñ ä, то сразу получаешь то, что эти буквы пропадают при записи данных в базу, особенно прикольно когда человек их в логине использует, а потом зайти не может. Цитата Ссылка на сообщение Поделиться на других сайтах
freeswap 2 Опубликовано: 14 сентября 2008 Рассказать Опубликовано: 14 сентября 2008 Есть небольшая проблема. Скрипт переконвертировал, но в нескольких местах, некоректноая кодировка. Почти везде где идет сокращение с многоточием, такая беда. У кого какие мысли? Цитата Ссылка на сообщение Поделиться на других сайтах
n0wheremany 0 Опубликовано: 14 сентября 2008 Рассказать Опубликовано: 14 сентября 2008 У кого какие мысли? Я встречался с этим. Это изза того, что кодировка УТФ8. Где 1 символ - 2 байта. Т.о. у вас в конце строки какбфы полусимвол. Решается просто: в .htaccess в самый верх добавить php_value mbstring.func_overload 6 Цитата Ссылка на сообщение Поделиться на других сайтах
freeswap 2 Опубликовано: 14 сентября 2008 Рассказать Опубликовано: 14 сентября 2008 (изменено) Спасибо за участие, но это не решило проблему. В гугле казалось бы много инфы на эту тему, но так и не нашел ответа. P.S. Это встречается в 3- местах. При редактировании новостей, когда мы видим весь список, тут, как показано на скрине и еще если нажать на "проверить обновления", то приходит строка такими вот вопросиками и на конце строки 7.2. Изменено 14 сентября 2008 пользователем freeswap Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 15 сентября 2008 Рассказать Опубликовано: 15 сентября 2008 У кого какие мысли? заменить substr на mb_substr Цитата Ссылка на сообщение Поделиться на других сайтах
freeswap 2 Опубликовано: 15 сентября 2008 Рассказать Опубликовано: 15 сентября 2008 заменить substr на mb_substr Это в каком файле заменить ? Или везде, во всех файлах? Цитата Ссылка на сообщение Поделиться на других сайтах
n0wheremany 0 Опубликовано: 15 сентября 2008 Рассказать Опубликовано: 15 сентября 2008 Спасибо за участие, но это не решило проблему. mbstring то добавь в php.ini )) Эта библиотека автоматом заменит substr на mb_substr Цитата Ссылка на сообщение Поделиться на других сайтах
freeswap 2 Опубликовано: 16 сентября 2008 Рассказать Опубликовано: 16 сентября 2008 Проблема остается в силе, добавил на локалке, все так же и осталось. В любом случае хостер вряд ли согласится менять что то в php.ini... Цитата Ссылка на сообщение Поделиться на других сайтах
n0wheremany 0 Опубликовано: 16 сентября 2008 Рассказать Опубликовано: 16 сентября 2008 В любом случае хостер вряд ли согласится менять что то в php.ini... Однако... Для работы с юникодом нужен модуль mbstring. Попроси включить её. Цитата Ссылка на сообщение Поделиться на других сайтах
Revloff 0 Опубликовано: 23 сентября 2008 Рассказать Опубликовано: 23 сентября 2008 Большое спасибо! Правда я все сделал в родном Dreamweawer. Главное было идею понять, суть в чем. Спасибо! Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.