s0rr0w — 22.12.2009 01:46:00

Не могу никак продуплить. В бэкэнде одной малоизвестной CMS используется utf8, чарсеты везде где только можно стоят utf-8. База просто кричит всеми фибрами полей, что она utf-8.

Текст выводится как и положено. Все хорошо, полная идилия. Одно беспокоит, почему именно в базе именно через phpmyadmin все данные в базе хранятся вот в таком виде Новости?

Кто даст внятный ответ?

Чур не смеяться.

Px — 22.12.2009 02:05:49

phpmyadmin какой ветки, 2.х или 3.х? В настройках

MySQL-кодировка:  UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: UTF-8_Unicode_ci

?
UPD: В исходнике страницы что пишет,

Код:

1:     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

?
CharsetDisable On в .htaccess?

s0rr0w — 22.12.2009 02:31:56

Px написал:

phpmyadmin какой ветки, 2.х или 3.х? В настройках

MySQL-кодировка:  UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: UTF-8_Unicode_ci

?
UPD: В исходнике страницы что пишет,

Код:

1:     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

?
CharsetDisable On в .htaccess?

Мне профессиональный танцор нужен :)
пхпмайадмин 3.2.2
Collation и прочее - utf-8
Чарсеты стоят.

CharsetDisable On в .htaccess приводит к Internal Server Error

Это все фигня, все работает. В админке и на сайте все в порядке. Почему в базе не та кодировка?

Px — 22.12.2009 02:45:35

s0rr0w написал:

CharsetDisable On в .htaccess приводит к Internal Server Error

mod_charset не установлен в апаче...

s0rr0w написал:

Почему в базе не та кодировка?

Потому что пишет не в той? :rolleyes:
Вон в базе форума общая кодировка utf8, страницы в ней же, а таблицы форума cp1251_general_ci и в коде layer-а mysql_query("SET NAMES cp1251"); :laughing:

Всё фигня, вспомнил, где я это видел - у тебя где-то при записи в базу лишнее преобразование в/из utf8

s0rr0w — 22.12.2009 11:39:45

Px написал:

Всё фигня, вспомнил, где я это видел - у тебя где-то при записи в базу лишнее преобразование в/из utf8

Код преобразования?

Px — 22.12.2009 12:03:09

s0rr0w написал:

Код преобразования?

Кхм, исходник у тебя, откуда я могу знать?
В примере в первом сообщении осмысленный текст написан, или фигня типа "Рэовопэти"?

Skunk — 22.12.2009 14:57:53

Если залогиниться на сервер и до выбора базы вывести таблицу Server variables and settings, что показывает (верхние 20 строк)?
Версия MyAdmin стоит AllLanguages или English?

Skunk — 22.12.2009 14:59:35

Установил себе последнюю версию MyAdmin AllLanguages (до этого стояла 2), проблему воссоздать не могу.

s0rr0w — 22.12.2009 15:56:13

Буду дома, отвечу на все вопросы

IRON — 22.12.2009 18:45:53

Судя по НовостÐ, при отображении 2-х байтный UTF-8 воспринялся как 1-но байтная кобировка (скорее всего cp1251), потому и отображает такую хрень. Нужно искать где иъян начиная с того, как они лежат в базе. Т.е. в какой кодировке лежат сами данные, а не всякие там SET NAMES.

Px — 22.12.2009 19:43:06

:)

Кодировки, фигли :) ----(UTF8->ISO-8859-1)----> КодиÑ?овки, фигли :)

LOUIE — 22.12.2009 20:45:39

Это UTF-8 в UTF-8 :blink: Причём индексируется оно правильно и происходит даже тогда, когда всё везде в UTF-8, так что сразу и не заметишь :) База думает что ты ей даёшь не UTF-8 и преобразовывает его в UTF-8, а на обратом пути — соответственно наоборот.

Надо ему "SET NAMES utf8" после коннекта говорить, тогда всё будет правильно. Кстати у меня даже где-то скрипт был, который заполненную таким образом базу в нормальный вид приводит, если надо будет...

Skunk — 22.12.2009 21:00:32

Дык вроде ж

В бэкэнде одной малоизвестной CMS используется utf8

Или ты думаешь, что бэкэнд глючный или неправильно настроен?

s0rr0w — 23.12.2009 00:33:19

LOUIE написал:

Это UTF-8 в UTF-8 :blink: Причём индексируется оно правильно и происходит даже тогда, когда всё везде в UTF-8, так что сразу и не заметишь :) База думает что ты ей даёшь не UTF-8 и преобразовывает его в UTF-8, а на обратом пути — соответственно наоборот.

Надо ему "SET NAMES utf8" после коннекта говорить, тогда всё будет правильно. Кстати у меня даже где-то скрипт был, который заполненную таким образом базу в нормальный вид приводит, если надо будет...

Фак май майнд!
Долбаные фашисты! Ну надо ж было задефайнить переменную в uppercase.... :angry2:
Нашел таки где это косячило!

Делись скриптом, буду конвертить.

Спасибо огромное! Настояший шаман!

Cutter Slade — 23.12.2009 01:26:36

s0rr0w написал:

Настояший шаман!

дык и бубен у него есть... :D

Skunk — 23.12.2009 11:28:47

Skunk написал:

Или ты думаешь, что бэкэнд глючный или неправильно настроен?

Вопрос снят :D

LOUIE — 24.12.2009 22:33:45

Обещанный наколенный скрипт.
Если запустить просто так, то он только показывает, что он сделает с базой, а если запустить ?do=go, то он это сделает!

Код:

 1: // chande mysql stored data encoding from default to specified
 2: $config = array(
 3:             'host' => 'localhost',
 4:             'username' => 'ыть',
 5:             'password' => 'ыть',
 6:             'database' => 'ыть',
 7:             'charset' => 'utf8'
 8:             ); 
 9: 
10: // variables
11: $tables = array();
12: $items =  array();
13: @$do = $_GET['do'];
14: 
15: // mysql_set_charset legacy definition 
16: if (!function_exists('mysql_set_charset')) {
17:     function mysql_set_charset($charset,$dbh) {
18:         return mysql_query("set names $charset",$dbh);
19:     }
20: }
21: 
22: echo '<h3>Connecting...</h3>';
23: mysql_connect($config['host'],$config['username'],$config['password']);
24: echo mysql_error();
25: mysql_select_db($config['database']);
26: echo mysql_error();
27: 
28: echo '<h3>Getting tables...</h3>';
29: $result = mysql_list_tables($config['database']);
30: echo mysql_error();
31: while ($row = mysql_fetch_row($result)) $tables[] = $row[0];
32: echo implode(', ', $tables);
33: 
34: echo '<h3>Select...</h3>';
35: foreach($tables as $tablename) {
36:     $items[$tablename] = array();
37:     $result = mysql_query("SELECT * FROM $tablename");
38:     echo mysql_error();
39:     while ($row = mysql_fetch_assoc($result)) $items[$tablename][] = $row;
40: }
41: 
42: echo '<h3>Set charset...</h3>';
43: mysql_set_charset($config['charset']);
44: echo mysql_error();
45: 
46: echo '<h3>Update...</h3>';
47: // loop tables
48: mysql_query("START TRANSACTION");
49: foreach($items as $tablename=>$table) {
50:     echo "<h4>$tablename (" . count($table) . ")</h4>";
51:     // loop rows
52:     foreach ($table as $row) {
53:         $id = $row['id'];
54:         echo "$id ";
55: 
56:         $values = array();
57:         // loop fields
58:         foreach ($row as $field=>$value) {
59:             if($value && !is_numeric($value)) {
60:                 $value = mysql_real_escape_string($value);
61:                 $values[] = "$field='$value'";
62:             }
63:         }
64: 
65:         // build query
66:         $set = implode(',',$values);
67:         $query = "UPDATE $tablename SET $set WHERE id=$id";
68: 
69:         // test or go
70:         if($do=='go') {
71:             mysql_query($query);
72:             if($error = mysql_error()) echo "$error <hr/>";
73:         } else {
74:             echo "<textarea rows=3 cols=85>$query</textarea><br/>";
75:         }
76:     }
77: }
78: mysql_query("COMMIT");
koff — 24.12.2009 23:09:50

прикольнооо :|

Freelancer — 25.12.2009 00:05:33

:| :| :|

SokraT(HO}I{) — 28.12.2009 01:59:58

Могли б и у ся в админке пообсуждать :lol: всеравно меж собой общаетесь :ninja:

s0rr0w — 28.12.2009 02:41:42

SokraT(HO}I{) написал:

Могли б и у ся в админке пообсуждать :lol: всеравно меж собой общаетесь :ninja:

Не указывай что нам делать, и мы не будем говорить тебе, куда идти. :mad: