Simple Machines Community Forum

SMF Support => Language Specific Support => Русский (Russian) => Topic started by: RXL on September 21, 2008, 10:26:12 AM

Title: Бага в SSI.php
Post by: RXL on September 21, 2008, 10:26:12 AM
Для полноценной работы с UTF-8 там не хватает в начале файла объявления
Code: (php) [Select]
global $db_character_set;
Это к сведению. Может привести к неверной кодировке при выдаче.
Title: Re: Бага в SSI.php
Post by: †MavN† on September 21, 2008, 11:55:50 AM
Версия smf и кусок кода где чего не хватает
Title: Re: Бага в SSI.php
Post by: RXL on September 22, 2008, 01:57:31 AM
Версия 1.1.6.

Code: [Select]
// We're going to want a few globals... these are all set later.
global $time_start, $maintenance, $msubject, $mmessage, $mbname, $language;
global $boardurl, $boarddir, $sourcedir, $webmaster_email, $cookiename;
global $db_server, $db_name, $db_user, $db_prefix, $db_persist, $db_error_send, $db_last_error, $db_character_set;
global $db_connection, $modSettings, $context, $sc, $user_info, $topic, $board, $txt;

$db_character_set добавлен мной. На UTF-8 я перешел только с этой версии и не могу сказать - были ли подобные проблемы в ранних версиях.

Думаю, что этот баг вылезает при require_once('..../SSI.php') не из глобального контекста, а из функции. И, конечно, важны настройки MySQL. У меня по дефолту кодировка клиента - latin1.

Code: [Select]
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8                       |
| character_set_filesystem | utf8                       |
| character_set_results    | latin1                     |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
Title: Re: Бага в SSI.php
Post by: †MavN† on September 22, 2008, 02:16:27 AM
Может конечно не прав но данная переменная нигде в SSI.php не употребляется для того чтобы ее в глобале объявлять так что тоже как и разработчики смысла особого не вижу в том чтобы ее в глобал поставить.
Title: Re: Бага в SSI.php
Post by: RXL on September 22, 2008, 02:45:56 AM
См. след.:
Если SSI.php вызывается из функции, то та вызывает Settings.php, который в свою очередь выполняется не в глобальном контексте.

Лучше объясню на примере.

file1.php
Code: [Select]
function my_func()
{
    require_once('file2.php');
}

my_func();

config.php
Code: [Select]
$var1 = 1;
$var2 = 2;

file2.php
Code: [Select]
global $var1;
// global $var2; // а это объявить забываем

require_once('config.php');

function smf_func()
{
    global $var1, $var2;

    // $var1 == 1
    // $var2 == null но никак не 2
}

Зато все было бы ОК, если бы в конфиге было либо объявление global для всех переменных конфига, либо использовался $GLOBALS.

config.php
Code: [Select]
$GLOBALS['var1'] = 1;
$GLOBALS['var2'] = 2;



$db_character_set используется в функции reloadSettings() из модуля Load.php - SSI.php вызывает его и именно там есть настройка кодировки подключения к базе.
Title: Re: Бага в SSI.php
Post by: †MavN† on September 22, 2008, 07:24:56 AM
угу в принципе нужно об этом просто сообщить разработчикам чтобы поправили.
на днях кинем в их раздел
Title: Re: Бага в SSI.php
Post by: 7fanatic on November 05, 2008, 11:19:24 AM
во, тоже столкнулся с этой проблемой, при выводе в вордпресс (утф8) из базы форума (утф8) в вордпрессе показывались "??????"

Добавление "lobal $db_character_set; " решило проблему.
Title: Re: Бага в SSI.php
Post by: RXL on November 08, 2008, 11:53:32 AM
Кстати, сегодняшний апдейт до 1.1.7 не исправляет эту проблему. Также игнорирована проблема с не-ascii именами вложений: http://www.simplemachines.org/community/index.php?topic=136952.msg1717374#msg1717374

Уважаемый MavN, вы не забыли сообщить об этих багах разработчикам?
Title: Re: Бага в SSI.php
Post by: Mongoose on October 13, 2011, 07:13:13 AM
Бага всё ещё актуальна для всех версий, включая последнюю SMF 2.0.1.
Title: Re: Бага в SSI.php
Post by: RXL on October 26, 2011, 11:22:58 AM
Я уже давно забил на это и патчу код форума самостоятельно. Очень помогает в этом контроль версий и багтрекер. А выходящие патчи приходится накладывать руками, но учитывая, что они стали очень редки и малы, то затруднений это не вызывает. Зато все найденные пользователями баги патчатся без ожидания разработчиков.
У меня вообще сложилось мнение, что развитие SMF остановилось. В 2.0.x не наблюдаю качественного скачка (на который намекает major version), т.к. архитектура осталась той же, что и в 1.1.x, со всеми присущими ей недостатками.
Title: Re: Бага в SSI.php
Post by: inter on November 21, 2011, 07:11:07 AM
Бага всё ещё актуальна для всех версий, включая последнюю SMF 2.0.1.

вы правы, позавчера подключался к базе через SSI.php и столкнулся с знаками вопросов вместо русских букв  :-\
исправилось при помощи:

Code: [Select]
$smcFunc['db_query']('', '
SET NAMES UTF8',
array(
)
);
Title: Re: Бага в SSI.php
Post by: noir_noir on April 07, 2014, 06:22:49 AM
Я невероятно благодарен тебе, чувак!!!