Перейти к публикации

Рекомендованные сообщения

Поскольку разработчик выпускает релизы только в кодировке 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 для ее первоначалньой установки. Однако я не вижу преград для применения его при обновении скриптов на новую версию.

Ссылка на сообщение
Поделиться на других сайтах

Спасибо.

А как насчет данной функци???

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 ?

Не пинайте, я не программист.

Ссылка на сообщение
Поделиться на других сайтах

Eagle, а фиг знает - пробыват ьнадо. Мне думается эта функция вообще не нужна - достаточно будет iconv

Ссылка на сообщение
Поделиться на других сайтах

у меня такой вопрос что существенного дает кодировка utf, просто щас делаю сайт, и думаю менять все на utf или нет, что вообще эта фича дает для русскоязычного сайта?

Ссылка на сообщение
Поделиться на других сайтах

что вообще эта фича дает для русскоязычного сайта?

абсолютно ничего. UTF-8 нужна чтобы одновременно писать на сайте например на русском и китайском. при UTF-8 иероглифы и кирилица на одной странице будет отображатся корректно.

А как насчет данной функци???

значения по умолчанию это значения по умолчанию, и не используются если есть другие значения. Например если кодировку не указать в настройках то применится значение по умолчанию, если указать, то от значения ни холодно ни жарко

Ссылка на сообщение
Поделиться на других сайтах

А как насчет данной функци???

Незнаю что делает данная функция, но раз все работает ОК, то я бы не стал ее трогать. Зачем?

Что касается кодировки UTF-8 - IMHO рано или поздно на нее прийдется переходить, поэтому если есть возможность то лучше это сделать сразу, чтобы потом не иметь проблем с конвертацией.

Ссылка на сообщение
Поделиться на других сайтах

Greeze,

это HTML Они занимают больше памяти в 8 раз, хотя для короткого текста никаких проблем.

Что касается кодировки UTF-8 - IMHO рано или поздно на нее прийдется переходить, поэтому если есть возможность то лучше это сделать сразу, чтобы потом не иметь проблем с конвертацией.

С чего вдруг? UTF-8 не является какой то новой новомодной кодировкой, существует для определенных целей. И переходит на нее рано или поздно не нужно

Ссылка на сообщение
Поделиться на других сайтах
  • 3 месяца спустя...

Вот еще чего интересно, в файле install.php есть строка

'charset' => "windows-1251",

Нужно ли и тут ставить utf-8 ?

Ссылка на сообщение
Поделиться на других сайтах

freeswap,

это кодировка которая установится в настройки скрипта.

Ссылка на сообщение
Поделиться на других сайтах

Хм, вчера менять не стал, оставил по-дефолту, но в скрипте после установки utf-8 :D

И еще почему то никто не скажет что нужно добавить в .htaccess

AddDefaultCharset utf-8

To celsoft

Может быть вы переведете дистрибутив на utf-8 по науке и сделаете доступным для скачивания, так же как сверсию cp1251?

Ссылка на сообщение
Поделиться на других сайтах

Если считать что, русский язык - единственный на свете, то UTF и нафиг не нужен, но стоит попробовать использовать любой другой язык (не обязательно китайский), имеющий буквы типа á é í ñ ä, то сразу получаешь то, что эти буквы пропадают при записи данных в базу, особенно прикольно когда человек их в логине использует, а потом зайти не может.

Ссылка на сообщение
Поделиться на других сайтах

Есть небольшая проблема. Скрипт переконвертировал, но в нескольких местах, некоректноая кодировка. Почти везде где идет сокращение с многоточием, такая беда.

fb40d0bae1d505a61cc7534ad4ecb443.jpg

У кого какие мысли?

Ссылка на сообщение
Поделиться на других сайтах

У кого какие мысли?

Я встречался с этим. Это изза того, что кодировка УТФ8. Где 1 символ - 2 байта. Т.о. у вас в конце строки какбфы полусимвол.

Решается просто:

в .htaccess в самый верх добавить

php_value mbstring.func_overload 6

Ссылка на сообщение
Поделиться на других сайтах

Спасибо за участие, но это не решило проблему. В гугле казалось бы много инфы на эту тему, но так и не нашел ответа.

P.S. Это встречается в 3- местах. При редактировании новостей, когда мы видим весь список, тут, как показано на скрине и еще если нажать на "проверить обновления", то приходит строка такими вот вопросиками и на конце строки 7.2.

Изменено пользователем freeswap
Ссылка на сообщение
Поделиться на других сайтах

заменить substr на mb_substr

Это в каком файле заменить ? Или везде, во всех файлах?

Ссылка на сообщение
Поделиться на других сайтах

Спасибо за участие, но это не решило проблему.

mbstring то добавь в php.ini ))

Эта библиотека автоматом заменит substr на mb_substr

Ссылка на сообщение
Поделиться на других сайтах

Проблема остается в силе, добавил на локалке, все так же и осталось.

В любом случае хостер вряд ли согласится менять что то в php.ini...

Ссылка на сообщение
Поделиться на других сайтах

В любом случае хостер вряд ли согласится менять что то в php.ini...

Однако... Для работы с юникодом нужен модуль mbstring. Попроси включить её.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...