Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL: Проблема с кодировками

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3

Открыть новую тему     Написать ответ в эту тему

Mafiozi777

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проблема с кодировкой в форуме SMF.
Создал базу  - CREATE DATABASE `ИМЯ_MySQL_БД`  DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci
 
Установил еще руссификацию на форум. Когда форум под русским языком то все нормально отображается кроме инфы которую вношу в textbox, т.е. название тем, разделов, тела сообщения. Когда вношу то нормально, но когда нажимаю "ок" что бы сохранить инфу возврается уже текст в вопросах.
Выбираю английский язык в форуме, и вся инфа на русском, английском вносится нормально.
Попробовал в кодировке браузера, когда нахожусь в англ выбрать кодировку "Кирилица Windows" - вся инфа краказябрами (что естественно) и в текстовых полях вопросы возвращаются.
Попробовал когда в русском меню выбрать кодировку в браузере ISO, все краказябрами но в текстовых полях инфа возвращается нормально.
Как исправить уже непойму, в чем проблема то. База создана вроде правильно.
 
Кто может помогите, буду благодарен !
 
Добавлено:
точнее когда в англ меню выбираю кодировку Windows то отбражается все ок, кроме текстовых полей.
 
Добавлено:
!!! я проверил, прям в базу уже записываются вопросы. Как устранить ?
 
Добавлено:
через phpmyadmin в базу вношу на русском и сохраняется вопросами.
 
Добавлено:
а в англ меню данные сохраняются в таком виде: база

Всего записей: 11 | Зарегистр. 11-02-2006 | Отправлено: 14:38 18-02-2006
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Писать правильный чарсет в хидере и тэге meta

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 16:00 18-02-2006
Brodyaga



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Сказать што за форум, дать линк на сайт если возможно.

----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 16:17 18-02-2006
Mafiozi777

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
хидер это где ? и мета тег в каком месте ? при обращении к базе ?
 
линк: http://www.usa-motors.com.ua/forum/index.php

Всего записей: 11 | Зарегистр. 11-02-2006 | Отправлено: 17:19 18-02-2006
Brodyaga



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
<?php
Header("Content-type:text/html;charset=windows-1251");
?>
Делается В РНР скрипте
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
</head>
Делается в HTML коде, аналог.
Видимо у тебя нечто другое, т.к. кодировка именно базы хромает...

----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 17:26 18-02-2006
Mafiozi777

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
спасибо. Но прикол в том что в самой базе вношу текст и он сохраняется вопросами. Хотя сравнение стоит cp1251_general_ci

Всего записей: 11 | Зарегистр. 11-02-2006 | Отправлено: 17:36 18-02-2006
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
http://phpclub.ru/faq/MySQL41Rus

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 18:08 18-02-2006
Mafiozi777

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
спасибо. Но прикол в том что в самой базе вношу текст и он сохраняется вопросами. Хотя сравнение стоит cp1251_general_ci
 
Добавлено:
спасибо. Но прикол в том что в самой базе вношу текст и он сохраняется вопросами. Хотя сравнение стоит cp1251_general_ci

Всего записей: 11 | Зарегистр. 11-02-2006 | Отправлено: 18:14 18-02-2006
Brodyaga



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Message^3="flood";
red_message_to_user("Mafiozi777");
 
Нефиг флудить.
Ты пробовал обращаться в "суппорт хостера"?

----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 20:25 18-02-2006
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mafiozi777, но прикол в том, что текст по ссылке надо читать.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 22:10 18-02-2006
Mafiozi777

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Читал, ничего непомогает. Буду с супортами общаться.

Всего записей: 11 | Зарегистр. 11-02-2006 | Отправлено: 12:56 19-02-2006
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Читал, ничего непомогает
Что не помогает? Чтение? А что вы кроме чтения делали? Похоже, что ничего. Иначе привели бы действия, которые выполняли.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 14:06 19-02-2006
Mafiozi777

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я через phpmyadmin нахожу то поле где текст у меня в ???, меняю на нужное и всеравно сохраняется в ???. Т.е. дело не в php скрпите, а в кодировке самой базы и изменить я никак немогу, хотя этого недолжно быть.
 
Пробовал менять системные переменные, а именно кодировки и ничего неменяется, вот такими запросами:
 
"
set character_set_client='cp1251';
set character_set_results='cp1251';
set collation_connection='cp1251_general_ci';
"
 
Phpmyadmin показывает:
 
character set client  utf8  koi8r  
character set connection  cp1251  koi8r  
character set database  koi8r  koi8r  
character set results  utf8  koi8r  
character set server  koi8r  koi8r  
character set system  utf8  utf8  
character sets dir  /usr/local/share/mysql/charsets/  /usr/local/share/mysql/charsets/  
collation connection  cp1251_bin  koi8r_general_ci  
collation database  koi8r_general_ci  koi8r_general_ci  
collation server  koi8r_general_ci  koi8r_general_ci  

Всего записей: 11 | Зарегистр. 11-02-2006 | Отправлено: 16:28 19-02-2006
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Попробуйте в начале вашего скрипта, но после соединения выполнить SQL-запрос «SET NAMES кодировка», где кодировка, та кодировка, в которой у вас (по вашему мнению) данные. Например, для русской виндовой кодировки (windows-1251) это будет cp1251, для KOI8-R – koi8r, для UTF-8 – utf8 и так далее.
...
Я вообще не понимаю, как надо читать материал, чтобы не прочесть его первые несколько абзацев.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 16:51 19-02-2006
Mafiozi777

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В форуме файлов немеренно, и где происходит соединение я незнаю. Я с базами столкнулся более неменее глубже неделю назад. Вроде в dumpdatabase.php:
 
if (!defined('SMF'))
    die('Hacking attempt...');
 
/*    This file has a single job - database backup.  Note that, because of the
    nature of its output, it uses the mysql_query() function instead of
    db_query(), so errors won't be outputted.
 
    void DumpDatabase2()
        - writes all of the database to standard output.
        - uses gzip compression if compress is set in the URL/post data.
        - may possibly time out in some cases.
        - the data dumped depends on whether "struct" and "data" are passed.
        - requires an administrator and the session hash by get.
        - is accessed via ?action=dumpdb.
 
    string getTableContent(string table_name)
        - gets all the necessary INSERTs for the table named table_name.
        - goes in 250 row segments.
        - returns the query to insert the data back in.
        - returns an empty string if the table was empty.
 
    string getTableSQLData(string table_name)
        - dumps the CREATE for the specified table. (by table_name.)
        - returns the CREATE statement.
*/
 
// Dumps the database to a file.
function DumpDatabase2()
{
    global $db_name, $db_prefix, $scripturl, $context, $modSettings, $crlf, $db_connection;
 
    // Administrators only!
    if (!allowedTo('admin_forum'))
        fatal_lang_error('no_dump_database');
 
    // You can't dump nothing!
    if (!isset($_GET['struct']) && !isset($_GET['data']))
        $_GET['data'] = true;
 
    checkSession('get');
 
    // Attempt to stop from dying...
    @set_time_limit(600);
 
    // Start saving the output... (don't do it otherwise for memory reasons.)
    if (isset($_REQUEST['compress']) && function_exists('gzencode'))
    {
        // Make sure we're gzipping output, but then say we're not in the header ^_^.
        if (empty($modSettings['enableCompressedOutput']))
            @ob_start('ob_gzhandler');
        // Try to clean any data already outputted.
        elseif (ob_get_length() != 0)
        {
            ob_end_clean();
            @ob_start('ob_gzhandler');
        }
 
        // Send faked headers so it will just save the compressed output as a gzip.
        header('Content-Type: application/x-gzip');
        header('Accept-Ranges: bytes');
        header('Content-Encoding: none');
 
        // Gecko browsers... don't like this. (Mozilla, Firefox, etc.)
        if (!$context['browser']['is_gecko'])
            header('Content-Transfer-Encoding: binary');
 
        // The file extension will include .gz...
        $extension = '.sql.gz';
    }
    else
    {
        // Get rid of the gzipping alreading being done.
        if (!empty($modSettings['enableCompressedOutput']))
            @ob_end_clean();
        // If we can, clean anything already sent from the output buffer...
        elseif (function_exists('ob_clean') && ob_get_length() != 0)
            ob_clean();
 
        // Tell the client to save this file, even though it's text.
        header('Content-Type: application/octetstream');
        header('Content-Encoding: none');
 
        // This time the extension should just be .sql.
        $extension = '.sql';
    }
 
    // This should turn off the session URL parser.
    $scripturl = '';
 
    // Send the proper headers to let them download this file.
    header('Content-Disposition: filename="' . $db_name . '-' . (empty($_GET['struct']) ? 'data' : (empty($_GET['data']) ? 'structure' : 'complete')) . '_' . strftime('%Y-%m-%d') . $extension . '"');
    header('Cache-Control: private');
    header('Connection: close');
 
    // This makes things simpler when using it so very very often.
    $crlf = "\r\n";
 
    // SQL Dump Header.
    echo
        '# ==========================================================', $crlf,
        '#', $crlf,
        '# Database dump of tables in `', $db_name, '`', $crlf,
        '# ', timeformat(time(), false), $crlf,
        '#', $crlf,
        '# ==========================================================', $crlf,
        $crlf;
 
    // Get all tables in the database....
    $queryTables = mysql_query("
        SHOW TABLES
        LIKE '" . strtr($db_prefix, array('_' => '\\_', '%' => '\\%')) . "%'", $db_connection);
 
    // Dump each table.
    while ($tableName = mysql_fetch_row($queryTables))
    {
        // Are we dumping the structures?
        if (isset($_GET['struct']))
        {
            echo
                $crlf,
                '#', $crlf,
                '# Table structure for table `', $tableName[0], '`', $crlf,
                '#', $crlf,
                $crlf,
                'DROP TABLE IF EXISTS `', $tableName[0], '`;', $crlf,
                $crlf,
                getTableSQLData($tableName[0]), ';', $crlf;
        }
 
        // How about the data?
        if (!isset($_GET['data']))
            continue;
 
        // Are there any rows in this table?
        $get_rows = getTableContent($tableName[0]);
 
        // No rows to get - skip it.
        if (empty($get_rows))
            continue;
 
        echo
            $crlf,
            '#', $crlf,
            '# Dumping data in `', $tableName[0], '`', $crlf,
            '#', $crlf,
            $crlf,
            $get_rows,
            '# --------------------------------------------------------', $crlf;
    }
 
    echo
        $crlf,
        '# Done', $crlf;
 
    exit;
}
 
// Get the content (INSERTs) for a table.
function getTableContent($tableName)
{
    global $crlf, $db_connection;
 
    // Get everything from the table.
    $result = mysql_query("
        SELECT *
        FROM `$tableName`", $db_connection);
 
    // The number of rows, just for record keeping and breaking INSERTs up.
    $num_rows = mysql_num_rows($result);
    $current_row = 0;
 
    if ($num_rows == 0)
        return '';
 
    $fields = array_keys(mysql_fetch_assoc($result));
    mysql_data_seek($result, 0);
 
    // Start it off with the basic INSERT INTO.
    $data = 'INSERT INTO `' . $tableName . '`' . $crlf . "\t(`" . implode('`, `', $fields) . '`)' . $crlf . 'VALUES ';
 
    // Loop through each row.
    while ($row = mysql_fetch_row($result))
    {
        $current_row++;
 
        // Get the fields in this row...
        $field_list = array();
        for ($j = 0; $j < mysql_num_fields($result); $j++)
        {
            // Try to figure out the type of each field. (NULL, number, or 'string'.)
            if (!isset($row[$j]))
                $field_list[] = 'NULL';
            elseif (is_numeric($row[$j]))
                $field_list[] = $row[$j];
            else
                $field_list[] = "'" . mysql_escape_string($row[$j]) . "'";
        }
 
        // 'Insert' the data.
        $data .= '(' . implode(', ', $field_list) . ')';
 
        // Start a new INSERT statement after every 250....
        if ($current_row > 249 && $current_row % 250 == 0)
            $data .= ';' . $crlf . 'INSERT INTO `' . $tableName . '`' . $crlf . "\t(`" . implode('`, `', $fields) . '`)' . $crlf . 'VALUES ';
        // All done!
        elseif ($current_row == $num_rows)
            $data .= ';' . $crlf;
        // Otherwise, go to the next line.
        else
            $data .= ',' . $crlf . "\t";
    }
    mysql_free_result($result);
 
    // Return an empty string if there were no rows.
    return $data;
}
 
// Get the schema (CREATE) for a table.
function getTableSQLData($tableName)
{
    global $crlf, $db_connection;
 
    // Start the create table...
    $schema_create = 'CREATE TABLE `' . $tableName . '` (' . $crlf;
 
    // Find all the fields.
    $result = mysql_query("
        SHOW FIELDS
        FROM `$tableName`", $db_connection);
    while ($row = mysql_fetch_assoc($result))
    {
        // Make the CREATE for this column.
        $schema_create .= '  ' . $row['Field'] . ' ' . $row['Type'] . ($row['Null'] != 'YES' ? ' NOT NULL' : '');
 
        // Add a default...?
        if (isset($row['Default']))
            $schema_create .= ' default ' . (is_numeric($row['Default']) ? $row['Default'] : "'" . mysql_escape_string($row['Default']) . "'");
 
        // And now any extra information. (such as auto_increment.)
        $schema_create .= ($row['Extra'] != '' ? ' ' . $row['Extra'] : '') . ',' . $crlf;
    }
    mysql_free_result($result);
 
    // Take off the last comma.
    $schema_create = substr($schema_create, 0, -strlen($crlf) - 1);
 
    // Find the keys.
    $result = mysql_query("
        SHOW KEYS
        FROM `$tableName`", $db_connection);
    $indexes = array();
    while ($row = mysql_fetch_array($result))
    {
        // IS this a primary key, unique index, or regular index?
        $row['Key_name'] = $row['Key_name'] == 'PRIMARY' ? 'PRIMARY KEY' : (empty($row['Non_unique']) ? 'UNIQUE ' : ($row['Comment'] == 'FULLTEXT' ? 'FULLTEXT ' : 'KEY ')) . $row['Key_name'];
 
        // Is this the first column in the index?
        if (empty($indexes[$row['Key_name']]))
            $indexes[$row['Key_name']] = array();
 
        // A sub part, like only indexing 15 characters of a varchar.
        if (!empty($row['Sub_part']))
            $indexes[$row['Key_name']][$row['Seq_in_index']] = $row['Column_name'] . '(' . $row['Sub_part'] . ')';
        else
            $indexes[$row['Key_name']][$row['Seq_in_index']] = $row['Column_name'];
    }
    mysql_free_result($result);
 
    // Build the CREATEs for the keys.
    foreach ($indexes as $keyname => $columns)
    {
        // Ensure the columns are in proper order.
        ksort($columns);
 
        $schema_create .= ',' . $crlf . '  ' . $keyname . ' (' . implode($columns, ', ') . ')';
    }
 
    // Now just get the comment and type... (MyISAM, etc.)
    $result = mysql_query("
        SHOW TABLE STATUS
        LIKE '" . strtr($tableName, array('_' => '\\_', '%' => '\\%')) . "'", $db_connection);
    $row = mysql_fetch_assoc($result);
    mysql_free_result($result);
 
    // Probably MyISAM.... and it might have a comment.
    $schema_create .= $crlf . ') TYPE=' . (isset($row['Type']) ? $row['Type'] : $row['Engine']) . ($row['Comment'] != '' ? ' COMMENT="' . $row['Comment'] . '"' : '');
 
    return $schema_create;
}
 

Всего записей: 11 | Зарегистр. 11-02-2006 | Отправлено: 16:58 19-02-2006
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
и где происходит соединение я незнаю
Там, где выполняется mysql_connect/mysql_pconnect - без них соединиться с базой - невозможно.
PS: и зачем здесь эта бессмысленная простыня, которую не только никто не будет читать, но и которая не имеет никакого отношения к делу? Удалите её нафиг - приводить в форумах код длиннее 10 строк - совершенно бессмысленно.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 18:52 19-02-2006 | Исправлено: SiMM, 18:53 19-02-2006
Brodyaga



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Млин, почти во всех форумах заголовочные файлы типа header.php, head.php.
Или просто рассмотри первые файлы, которые includeатся в верхушке файла index.php

----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 19:05 19-02-2006
Mafiozi777

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
О, это ближе к делу, спасибо !
 
Добавлено:
Получилось ! Ура ! . Спасибо всем за помощь. У себя на сайте создам описание конкркетно как устранять такую проблему в данном форуме.
 
Добавлено:
только вот еще что важно ! Сравнение в базе должно стоять 1257 !

Всего записей: 11 | Зарегистр. 11-02-2006 | Отправлено: 19:44 19-02-2006
Delta RuBoard



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Пипл, обьясните как перевести с MySQL3 базу в MYSQL4 ?
Просто при переводе все меняется на "?????"
Есть ли какойто способ ?

----------
мой маленький блог
Создание on-line игр

Всего записей: 382 | Зарегистр. 21-06-2005 | Отправлено: 19:56 28-03-2006
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
сделай так
mysql_query("set CHARACTER SET cp1251"); //force cp1251 codepage
сразу после mysql_connect
и будет счастье.

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 21:07 28-03-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3

Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL: Проблема с кодировками


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru