Опять проблема с кодировкой

Статус
В этой теме нельзя размещать новые ответы.

alexo

Участник
Регистрация
28 Май 2006
Сообщения
315
Реакции
5
Привет

Знаю, что проблема старая, да и я сам кажется пару раз этот вопрос задавал и что самое странное, что всё было ОК.

Пока в очередной раз не сталкнулся с очередным сайтом с той же проблемой.

Сейчас коротко что к чему.

Сайт в юникоде кодировка -UTF8

Зная, как бороться с этой проблемой изначально поставил все настройки как надо.

1.System Preferences -General Configuration - UTF-8

2. CP Home › Admin › Weblog Administration › Weblog Management › Edit Weblog - XML Character Encoding - UTF-8


3, db/db.mysql.php
in Connect to database

Код:
    /** ---------------------------------------    
    /**  Connect to database
    /** ---------------------------------------*/
    
    function db_connect($select_db = TRUE)
    {    
        $this->conn_id = ($this->conntype == 0) ?
          @mysql_connect ($this->hostname, $this->username, $this->password):
          @mysql_pconnect($this->hostname, $this->username, $this->password);
        
        if ( ! $this->conn_id)
        {            
            return FALSE;        
        }
        
        if ($select_db == TRUE)
        {
            if ( ! $this->select_db())
            {
                return FALSE;    
            }
        }
        
$this->query("SET NAMES 'utf8'");
$this->query("SET CHARACTER SET utf8");
$this->query("SET COLLATION_CONNECTION=utf8_general_ci");
        
        return TRUE;
    }
    /* END */
4. текст строго в юникоде вводиться

---------------
в админке всё ок, но в базе (и в пхпадмин) и если смотрю файл сурс - идет текск такого рода

& laquo; & laquo; & # 1358;& # 1377; & # 1404; &# 1387;ր только слитно
------------
пролистал мейн форум - сделал всё когда то, кто то кому советовали (имею ввиду дельные советы :nezn:)
1. база строга -в Collation - utf8_general_ci
2. переконвертировал всю базу через этот скрипт

Код:
<?php
// Fill in your configuration below
$db_server      = 'localhost';
$db_user      = '**';
$db_password   = '**';
$db_name      = '***';

// Do not change anything below this
// set_time_limit(0);
header('Content-type: text/plain');

$connection = mysql_connect($db_server, $db_user, $db_password) or die( mysql_error() );
$db = mysql_select_db($db_name) or die( mysql_error() );

$sql = 'SHOW TABLES';
if ( !($result = mysql_query($sql)) )
{
   print '<span style="color: red;">SQL Error: <br>' . mysql_error() . "</span>\n";
}

// Loop through all tables in this database
while ( $row = mysql_fetch_row($result) )
{
   $table = mysql_real_escape_string($row[0]);
   $sql2 = "ALTER TABLE $table DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci";
   
   if ( !($result2 = mysql_query($sql2)) )
   {
      print '<span style="color: red;">SQL Error: <br>' . mysql_error() . "</span>\n";
      
      break;
   }
   
   print "$table changed to UTF-8 successfully.<br>\n";

   // Now loop through all the fields within this table
   $sql3 = "SHOW COLUMNS FROM $table";
   if ( !($result3 = mysql_query($sql3)) )
   {
      print '<span style="color: red;">SQL Error: <br>' . mysql_error() . "</span>\n";
      
      break;
   }

   while ( $row3 = mysql_fetch_row($result3) )
   {
      $field_name = $row3[0];
      $field_type = $row3[1];
      
      // Change text based fields
      $skipped_field_types = array('char', 'text', 'blob', 'enum', 'set');
      
      foreach ( $skipped_field_types as $type )
      {
         if ( strpos($field_type, $type) !== false )
         {
            $sql4 = "ALTER TABLE $table CHANGE `$field_name` `$field_name` $field_type CHARACTER SET utf8 COLLATE utf8_bin";
            if ( !($result4 = mysql_query($sql4)) )
            {
               print '<span style="color: red;">SQL Error: <br>' . mysql_error() . "</span>\n";
               
               break 3;
            }
            print "---- $field_name changed to UTF-8 successfully.<br>\n";
         }
      }
   }
   print "<hr>\n";
}

mysql_close($connection);
?>
не помогло, под конец весь текст из базы ручную перевёл в юникод прямо в пхпадмине.

на вид всё ок, но когда добавляю ню entry - текст опять такого рода

& laquo; & laquo; & # 1358;& # 1377; & # 1404; &# 1387;ր только слитно
подскажите, что я не правильно делаю, или что ещё я не сделал ?
 
Попробуй так.

$db->Execute("SET character_set_database=UTF8");
$db->Execute("SET character_set_client=UTF8");
$db->Execute("SET character_set_connection=UTF8");
$db->Execute("SET character_set_results=UTF8");
$db->Execute("SET character_set_server=UTF8");
$db->Execute("SET names UTF8");

саму базу(и таблицу) преведи в utf_general_ci (как-то так вроде бы)
только вот у себя так победил)
 
саму базу(и таблицу) преведи в utf_general_ci (как-то так вроде бы)

скрипт выше как раз уже сделал это, но всё равно даже новый текст(статья) добавляется таким же макаром (через & # 1377; & # 1404; )

Добавлено через 4 минуты
$db->Execute("SET character_set_database=UTF8");
$db->Execute("SET character_set_client=UTF8");
$db->Execute("SET character_set_connection=UTF8");
$db->Execute("SET character_set_results=UTF8");
$db->Execute("SET character_set_server=UTF8");
$db->Execute("SET names UTF8");
кстати куда этот код ставить
 
попробуй заменить вот эти строчки в db/db.mysql.php
$this->query("SET NAMES 'utf8'");
$this->query("SET CHARACTER SET utf8");
$this->query("SET COLLATION_CONNECTION=utf8_general_ci");

на

$this->query("SET character_set_database=UTF8");
$this->query("SET character_set_client=UTF8");
$this->query("SET character_set_connection=UTF8");
$this->query("SET character_set_results=UTF8");
$this->query("SET character_set_server=UTF8");
$this->query("SET names UTF8");
 
Если я правильно понял

Collation Вы изменили. А сами таблицы?

Я имею в виду не контент, который Вы изменили, а кодировку таблиц. Полагаю, она по-прежнему Latin1.

А должно быть:

Код:
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Сделайте дамп БД и посмотрите, у Вас CHARSET=utf8 в этой строке?

Предполагаю, Вы поздно Collation изменили. Теперь и CHARSET надо изменить у всех таблиц вручную.
 
Сделайте дамп БД и посмотрите, у Вас CHARSET=utf8 в этой строке?
Все верно, так быстрее разберетесь где у Вас не UTF-8.
Еще пропишите строку принудительной кодировки в .htaccess (для теста, измениться ли что-нибудь или нет). Damp делайте не через phpMyAdmin, а например используя dumper.php. Тогда исключается возможность некорректной работы phpMyAdmin с MySQL. (такое бывает из-за неадаптированности панели администрирования (ранних версий) к версии MySQL)
 
Сделайте дамп БД и посмотрите, у Вас CHARSET=utf8 в этой строке?

Предполагаю, Вы поздно Collation изменили. Теперь и CHARSET надо изменить у всех таблиц вручную.
я на 99% помню, что CHARSET=utf8 в каждой строке (смотрел дамп несколько дней назад).
ще пропишите строку принудительной кодировки в .htaccess
прописал в самом начале

Damp делайте не через phpMyAdmin, а например использую dumper.php.

ещё с пмашин, когда база стала большая, phpMyAdmin стал украшением в этом смысле
 
Только что обратил внимание на Ваш код.

Я делаю несколько иначе.

Попробуйте заменить

Код:
$this->query("SET NAMES 'utf8'");

на

Код:
$this->server_info = @mysql_get_server_info();
mysql_query("SET NAMES 'utf8'");
 
а я вот чего не пойму - развели тут целую ветку каких-то рецептов о UTF-8... А у человека в базе - ASCII кода. Они в принципе не могут образоваться из-за проблем с UTF-8. Зато в EE есть настройки, которые позволяю записи сохранять в данном формате и соответственно выключать данный режим.
 
а я вот чего не пойму - развели тут целую ветку каких-то рецептов о UTF-8
Ну если не поймешь, то не стоит со своими комментами в умного играть. Разговор не столько о том, чем это вызвано, сколько о том как быть человеку, чтобы работало как надо и не вызывало неприятностей. Я сам с EE не работал, но умничать постеснялся бы, а показал бы пальцем человеку где эти настройки.
To:Для просмотра ссылки Войди или Зарегистрируйся
Не расстраивайся, решим твою проблему. Глобальное решение изменения кодировки в EE возможно. Почитай вот Для просмотра ссылки Войди или Зарегистрируйся
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху