Забыли пароль?
Запросите новый здесь.

Автор темы: jikaka
ID темы: 1244
Информация:
Тема содержит 108 сообщения, была просмотрена 73928 раз.  Имеются прикрепленные файлы.
Просмотр темы
PHP-Fusion Russia » Поддержка 7 версии » Локализация
 Распечатать тему
Locale UTF-8 для v7.02.06
grungestranger
Система чистая.
 
Web
BolkS
Надеюсь админы займутся и сделают все как надо. Движок переконвертированный в UTF-8 без BOOM, локаль в UTF-8 и аддоны соответственно!
Буду ждать, Удачи!
v7.02.06
 
Web
APTEMbI4
Интересно было бы посмотреть ab А если ставить ещё дополнительные плагины. Их тоже конвертить?
 
Web
Vova
Интересно было бы посмотреть А если ставить ещё дополнительные плагины. Их тоже конвертить?


Да.

Надеюсь админы займутся и сделают все как надо. Движок переконвертированный в UTF-8 без BOOM, локаль в UTF-8 и аддоны соответственно!
Буду ждать, Удачи!


Уже сделал?

grungestranger написал:

FAQ по utf8:
Замените папку /locale/Russian на локаль из этой темы.
В файле /locale/Russian/setup.php заменить:
Скачать исходники  Код
$locale['charset'] = "windows-1251";



на
Скачать исходники  Код
$locale['charset'] = "utf-8";



В файлах /setup.php и /maincore.php после:
Скачать исходники  Код
$db_connect = @mysql_connect($db_host, $db_user, $db_pass);
$db_select = @mysql_select_db($db_name);



добавить
Скачать исходники  Код
@mysql_query("SET NAMES 'utf8'");



Если база данных уже существует, то конвертировать ее в utf8:
Скачать исходники  Код
   $query = mysql_query("SHOW TABLES");
   if (mysql_num_rows($query) > 0) {
      while($row = mysql_fetch_array($query, MYSQL_NUM)) {
         mysql_query("ALTER TABLE ".$row[0]." CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;");
      }
   }



Иначе - создать новую базу данных с collation (сравнением) utf8_general_ci

У всех плагинов файлы локалей перекодировать в utf8, и проверить с каким сравнением создаются таблицы в базе данных.

При установке с нуля на хостинге - все отлично.
При установке с нуля на денвере - в последнем шаге установки выдает ошибку:
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\test.ru\www\locale\Russian\setup.php:1) in Z:\home\test.ru\www\setup.php on line 29
Но вроде бы все устанавливается нормально.

Кто знает, из-за чего эта ошибка на денвере - отпишитесь)


Конвертни в без БОМ.
Изменил(а) Vova, 03.03.2013 15:48
 
Web
BolkS
APTEMbI4, конвертации одной бывает недостаточно. Приходится код править с явным указанием UTF-8. Ну или переписывать плагин с нуля...
v7.02.06
 
Web
Vova
BolkS написал:

APTEMbI4, конвертации одной бывает недостаточно. Приходится код править с явным указанием UTF-8. Ну или переписывать плагин с нуля...


Зачем с нуля? Просто поправить нужние вещи.
 
Web
BolkS
Vova написал:

Зачем с нуля? Просто поправить нужние вещи.

Я пробовал уже править. Иногда доходит до безобразия - почти в каждой строчке явно указывать UTF-8. Проще переписать...
v7.02.06
 
Web
Vova
BolkS написал:

Vova написал:

Зачем с нуля? Просто поправить нужние вещи.

Я пробовал уже править. Иногда доходит до безобразия - почти в каждой строчке явно указывать UTF-8. Проще переписать...


Я свой движок. Переделал в UTF-8 полностю. Но потом назад вернул. Так как много занимает эта кодировка.

4 байта символ. А в 1251 - 1 байт.

Этим скриптом базу конвертируеш.

Скачать исходники  Код
<?php

 $time = microtime(true);

 $db = '';
 $login = '';
 $passw = '';
 $host = '';

 $res = mysql_connect($host, $login, $passw);
 mysql_select_db($db);

 mysql_query('SET NAMES utf8;');

 $rs = mysql_query('SHOW TABLES;');
 print mysql_error(); //the notorious 'command out of synch' message :(
 while (($row=mysql_fetch_assoc($rs))!==false) {

 $time1 = microtime(true);
 //print $row['Tables_in_vspomni2']."\n";
 $table_name = $row['Tables_in_'.$db];
 $query = 'SHOW CREATE TABLE '.$table_name;

 $row_create = mysql_query($query);
 print mysql_error();
 $row1 = mysql_fetch_assoc($row_create);

 if (strpos($row1['Create Table'], 'DEFAULT CHARSET=utf8') !== false)
 {
 print 'Table '.$table_name.' — skipped'."\n";
 continue;
 }

 $create_table_scheme = str_ireplace('cp1251', 'utf8', $row1['Create Table']); // CREATE TABLE SCHEME
 $create_table_scheme = str_ireplace('ENGINE=InnoDB', 'MyISAM', $create_table_scheme);
 $create_table_scheme .= ' COLLATE utf8_bin';

 //print $create_table_scheme;
 //continue;

 $query = 'RENAME TABLE '.$table_name.' TO '.$table_name.'_tmp_export'; // RENAME TABLE;
 mysql_query($query);
 $error = mysql_error();
 if (strlen($error) > 0)
 {
 print $error.' — LINE '.__LINE__."\n";
 break;
 }

 $query = $create_table_scheme;
 mysql_query($query);
 $error = mysql_error();
 if (strlen($error) > 0)
 {
 print $error.' — LINE '.__LINE__."\n";
 break;
 }

 $query = 'ALTER TABLE '.$table_name.' DISABLE KEYS';
 mysql_query($query);
 $error = mysql_error();
 if (strlen($error) > 0)
 {
 print $error.' — LINE '.__LINE__."\n";
 break;
 }

 $query = 'INSERT INTO '.$table_name.' SELECT * FROM '.$table_name.'_tmp_export';
 mysql_query($query);
 $error = mysql_error();
 if (strlen($error) > 0)
 {
 print $error.' — LINE '.__LINE__."\n";
 break;
 }

 $query = 'DROP TABLE '.$table_name.'_tmp_export';
 mysql_query($query);
 $error = mysql_error();
 if (strlen($error) > 0)
 {
 print $error.' — LINE '.__LINE__."\n";
 break;
 }

 $time3 = microtime(true);
 $query = 'ALTER TABLE '.$table_name.' ENABLE KEYS';
 mysql_query($query);
 $error = mysql_error();
 if (strlen($error) > 0)
 {
 print $error.' — LINE '.__LINE__."\n";
 break;
 }

 print 'Enable keys to '.$table_name.'. time -'.(microtime(true) — $time3)."\n";
 print 'converted '.$table_name.'. time — '.(microtime(true) — $time1)."\n\n";

 }
 mysql_free_result($rs);

 print 'done. total time -'.(microtime(true) — $time);
 ?>




Делаеш кодировку соединия utf_general_ci.

Конвертируеш все файлы в UTF-8 БЕЗ БОМ.

Далее ищеш NotePad++.

Открываеш всё файлы. И делаеш массовую замену cp1251 и windows-1251 на utf-8.

Ставиш расширение mb_strings для PHP.

Далее ищеш функции strlen и substr. И заменяеш их на mb_strlen и mb_substr.

И всё.
 
Web
Polarfox
Для чего тебе 4х байтный уникод?
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле.
Ежели кто забанен за спам, но не считает себя ботом: можете сообщить мне об этом, все будет хорошо.

PolarLab - вход для подопытных
x1
 
Web
grungestranger
mb_strings ставить обязательно?
 
Web
Vova
PolarFox написал:

Для чего тебе 4х байтный уникод?


А сколько занимает один символ в кодировке юникод?

grungestranger написал:

mb_strings ставить обязательно?


Да.
 
Web
grungestranger
А сколько занимает один символ в кодировке юникод?

Есть обычный юникод, в котором латинские символы занимают 1 байт, все остальные 2 байта, есть 16 битный юникод, в котором все символы по 2 байта

grungestranger написал:

mb_strings ставить обязательно?


Да.


Что-то всю жизнь нормально работал без mb_strings на utf8 и все работало.
 
Web
Vova
grungestranger написал:

А сколько занимает один символ в кодировке юникод?

Есть обычный юникод, в котором латинские символы занимают 1 байт, все остальные 2 байта, есть 16 битный юникод, в котором все символы по 2 байта

grungestranger написал:

mb_strings ставить обязательно?


Да.


Что-то всю жизнь нормально работал без mb_strings на utf8 и все работало.


00000000 — 0000007F 1 байт ASCII, в том числе латинский алфавит, простейшие знаки препинания и арабские цифры
00000080 — 000007FF 2 байта кириллица, расширенная латиница, арабский, армянский, греческий, еврейский и коптский алфавит; сирийское письмо, тана, нко; МФА; некоторые знаки препинания
00000800 — 0000FFFF 3 байта все другие современные формы письменности, в том числе грузинский алфавит, индийское, китайское, корейское и японское письмо; сложные знаки препинания; математические и другие специальные символы
00010000 — 001FFFFF 4 байта музыкальные символы, редкие китайские иероглифы, вымершие формы письменности
x1
 
Web
SchreiBear
Serge Renard написал:


При установке с нуля на денвере - в последнем шаге установки выдает ошибку:
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\test.ru\www\locale\Russian\setup.php:1) in Z:\home\test.ru\www\setup.php on line 29
Но вроде бы все устанавливается нормально.

Кто знает, из-за чего эта ошибка на денвере - отпишитесь)

Смысл ошибки понятен - не получается сделать переадресацию на index.php из-за того, что на страницу уже пошёл вывод и заголовки не могут быть отправлены. Однако IMHO ошибка эта возникает скорее всего не только на Денвере, но и у тебя на хостинге тоже - просто на хостинге, как правило, отключён вывод предупреждений PHP, и ты их просто не видишь :)





вот ответ относительно HEADER

в шапку setup.php


if(!headers_sent()){
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Content-type: text/html; charset=UTF-8");}




пройдёт без ошибки

http://www.php.ne...s-sent.php
Изменил(а) SchreiBear, 03.03.2013 19:41
Нужно сказать огромное спасибо людям, которые живут на популярных девелопер форумах и дают там адекватные ответы на абсолютно «нубские» вопросы без попыток унизить вопрошающего.
 
grungestranger
Кому не сложно, объясните по-подробнее - что делает и зачем нужен mb_strings в php fusion при кодировке utf8.
Изменил(а) grungestranger, 03.03.2013 20:20
 
Web
SchreiBear
всё я сделал! работает !!!

ушли квадраты с длинных слов . не проглатывает буквы .. UTF-8 без БУМ


setup.php

всё дело в длине строки заносимых Базу данных

VARCHAR(50) на VARCHAR(64)

смотреть ещё нужно к примеру длину строки к примеру в мини чате они должны быть адаптированны под UTF-8 ИХ длинна не совпадает с с латиницы. по этому!!! работайте автономно в режиме научного ТЫКА

всё остальное как было описано ранее

изменения в setup.php в шапку добавляем

Скачать исходники  Код
if(!headers_sent()){
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Content-type: text/html; charset=UTF-8");}





locale/Russian/global.php

строка 15 на
Скачать исходники  Код
 $locale['charset'] = "UTF-8";





locale/Russian/global.php

строка 6 на
Скачать исходники  Код
$locale['charset'] = "UTF-8";




в папке themes/templates/
в файлах header в админке и везде


перед
Скачать исходники  Код
echo "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>\n";



подбавлял строку
Скачать исходники  Код
echo '<?xml version="1.0" encoding="utf-8"?>';


чтобы на 100% было всё ПУЧЬКОМ!!!

полностью папку files с под папками и мамками;) и всё файлы *.php конвертировал в UTF-8 no BOM


ВСЁ!

поправите если что забыл... прогу прилепил - тестирую дальше
SchreiBear присоединено следующее:файл:
ansi2uni_1.zip [5.5кБ / 359 Загрузки]

Изменил(а) SchreiBear, 03.03.2013 22:27
Нужно сказать огромное спасибо людям, которые живут на популярных девелопер форумах и дают там адекватные ответы на абсолютно «нубские» вопросы без попыток унизить вопрошающего.
x1
 
Polarfox
Оффтопик
музыкальные символы, редкие китайские иероглифы, вымершие формы письменности
это меняет дело.
И много китайцев-суперстариков, говорящих о музыке вымершими формами письменности у тебя?

Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле.
Ежели кто забанен за спам, но не считает себя ботом: можете сообщить мне об этом, все будет хорошо.

PolarLab - вход для подопытных
x2
 
Web
grungestranger
Vova, действительно без mb_ не обойтись.
edmonsur, не думаю, что в БД нужно что-то менять. Тестировал мини-чат (который стоит на этом сайте) - сначала длинный русский текст обрезался, вместо 200 символов было ~ 140, но после исправления некоторых ошибок (preg_replace без /u, strlen хотя должен быть mb_strlen [потом распишу все подробно]) все стало работать правильно без каких-либо изменений в БД.
Друзья, подскажите, обязательно ли конвертировать ВСЕ файлы в utf8, или достаточно только файлы локали? (У меня переконвертированы только файлы локали, и вроде все нормально работает)
 
Web
Polarfox
grungestranger, а потому что чатики писались под однобайтову кодировку.
И так будет со всеми плагинами, внезапно окажется что у них там свои заморочки под 1 байт заточенные, например.

Оффтопик Грядет восьмерка, покайтесь, забудьте про мутацию в уникод

Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле.
Ежели кто забанен за спам, но не считает себя ботом: можете сообщить мне об этом, все будет хорошо.

PolarLab - вход для подопытных
 
Web
Vova
grungestranger написал:

Vova, действительно без mb_ не обойтись.
edmonsur, не думаю, что в БД нужно что-то менять. Тестировал мини-чат (который стоит на этом сайте) - сначала длинный русский текст обрезался, вместо 200 символов было ~ 140, но после исправления некоторых ошибок (preg_replace без /u, strlen хотя должен быть mb_strlen [потом распишу все подробно]) все стало работать правильно без каких-либо изменений в БД.
Друзья, подскажите, обязательно ли конвертировать ВСЕ файлы в utf8, или достаточно только файлы локали? (У меня переконвертированы только файлы локали, и вроде все нормально работает)


Нужно все файлы в которих есть текст переконвертировать..
 
Web

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум:
Похожие темы
Темы Форум Ответов / Просмотров Последние сообщения
Вы пишите комерческие предложения (КП) для форумов и фриланс-бирж?  →  Народное творчество 0 / 125 25.11.2018 18:43
Есть ли готовые плагины для сайтов по недвижимости и, автодилера и пр?  →  Пожелания и предложения 0 / 117 10.11.2018 17:41
Версия сайта для слабовидящих  →  Пожелания и предложения 12 / 10497 04.11.2018 17:32
Zinsta - Программа для раскрутки и продвижения instagram  →  Флуд 8 / 681 26.10.2018 15:27
Какая самая лучшая программа для очистки компьютера?  →  Флуд 13 / 5285 25.10.2018 14:29
Разные шаблоны для разных страниц?  →  Моды 19 / 7214 22.10.2018 07:28
3 месяца хостинга бесплатно. Может кому-нибудь для каких целей сгодится.  →  Хостинг 0 / 460 04.07.2018 07:15
ProVPS.online - Лучший выбор для Ваших проектов  →  Хостинг 1 / 861 04.06.2018 09:21
Как найти в БД для панели "похожие статьи, новости, темы"?  →  Пожелания и предложения 0 / 576 23.04.2018 17:29
Сайт для игры  →  Разное 7 / 12287 19.02.2018 18:15
Топ 5 пользователей форума
Alex Alex (1,198)   Zaxap Zaxap (1,078)   Vova Vova (877)   Pisatel Pisatel (678)   util util (666)