Главная страница / Советы / Избавляемся от знаков "????" после установки скрипта
декабрь 12 2006

Избавляемся от знаков "????" после установки скрипта

celsoft 12 декабря 2006 Советы 54 166
Продолжаем публикацию серии полезных советов по работе с движком. На этот раз опишем наиболее популярный вопрос: "А почему у меня ??? вместо текста новостей".

И так вы установили скрипт и с удивлением обнаружили что у вас ??? вместо русского текста, то конечно впервую очередь идут гневные вопросы авторам скрипта. Хотя я бы на вашем месте впервую очередь задал бы этот вопрос вашему хостеру. Мне тоже например интересно почему у хостеров в России локаль по умолчанию в MySQL сервере настроена на latin1. Что все клиенты у них говорят на английском? Я еще могу понять когда стоит UTF-8, но когда у российского хостера стоит latin1_swedish_ci. Это просто убивает, это говорит только о полной некомпетенции хостера по настройке MySQL сервера или о его лени. Итак хватит вступления, пора приступить к практике как от этого избавится, неожидая неповоротливости хостера:

Во первых решить этот вопрос можно по разному, все зависит от того каковы настройки вашего сервера поэтому я напишу вам по пунктам, и вы просто выполняйте их по порядку, каждый из этих пунктов может решить проблему, поэтому проверяйте работоспособность после каждого пункта.

1. Скрипт после установки пытается установить для таблиц нужную локаль, но помимо этого еще существует и сопоставление соединения с MySQL. Поэтому вам необходимо зайти в MyPHPAdmin и установить сопоставление соединения с MySQL на cp1251_general_ci. Не переживайте это доступно не всем, поэтому если вы не найдете нужного пункта, то просто читайте дальше.

2. Посмотрите в MyPHPAdmin какое сопоставление стоит в ваших таблицах. Должно быть также cp1251_general_ci. Если там стоит другое значение, то выполните следующий запрос:

ALTER DATABASE `база` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci

Вместо "база" незабудьте написать имя вашей базы данных, в которую установлен скрипт.

3. И последний пункт если вам не помогли первые два, то откройте файл engine/inc/mysql.php и найдите
    function connect($db_user, $db_pass, $db_name, $db_location = 'localhost', $show_error=1)
    {
        if(!$this->db_id = @mysql_connect($db_location, $db_user, $db_pass)) {
            if($show_error == 1) {
                $this->display_error(mysql_error(), mysql_errno());
            } else {
                return false;
            }
        } 

        if(!@mysql_select_db($db_name, $this->db_id)) {
            if($show_error == 1) {
                $this->display_error(mysql_error(), mysql_errno());
            } else {
                return false;
            }
        }

        return true;
    }

замените его на:
    function connect($db_user, $db_pass, $db_name, $db_location = 'localhost', $show_error=1)
    {
        if(!$this->db_id = @mysql_connect($db_location, $db_user, $db_pass)) {
            if($show_error == 1) {
                $this->display_error(mysql_error(), mysql_errno());
            } else {
                return false;
            }
        } 

        if(!@mysql_select_db($db_name, $this->db_id)) {
            if($show_error == 1) {
                $this->display_error(mysql_error(), mysql_errno());
            } else {
                return false;
            }
        }

        mysql_query("/*!40101 SET NAMES 'cp1251' */");
        return true;
    }


Все теперь, у вас точно пропадут все знаки "???", да кстати перед тем как проверяете решилась проблема или нет, незабывайте удалять все файлы .php из папок engine/cache/ и engine/cache/system/. Это кеш из базы данных.

Комментарии

  1. Copoket (Посетители)

    29 января 2007 13:23 8 комментариев
    5.3 та же проблема :( третий не подходит, первые 2 не помогли what
  2. BugZ (Клиенты)

    3 февраля 2007 22:32 17 комментариев
    заметил что все переехало в файлик mysql.class.php и дополнилось. у тех у кого лагануло должно исправляться удалением двух строчек: $this->mysql_version = mysql_get_server_info();

    if (version_compare($this->mysql_version, '4.1', ">=")) mysql_query("/*!40101 SET NAMES 'cp1251' */");

    так что теперь надо править mysql.class.php
  3. Imperio (Клиенты)

    10 февраля 2007 20:57 12 комментариев
    BugZ,
    Спасибо, помогло! smile
  4. alexsnake13 (Посетители)

    23 марта 2007 00:59 1 комментарий
    BugZ
    у мя не помогает всеравно ничего((
  5. salk (Посетители)

    3 мая 2007 20:03 3 комментария
    Все равно не помогает, если на браузере поменять кодировку все становится на свои места, но стоит перейти на другую страницу и снова закорючки.
    Если кто знает как исправить, подскажите.
  6. Mr 13 (Посетители)

    23 мая 2007 12:14 97 комментариев
    salk, отключи в браузере автовыбор кодировки, и юзай FireFox, а не IE и не Оперу. laughing
  7. BugZ (Клиенты)

    30 октября 2007 07:56 17 комментариев
    Я вот никак не пойму - почему этот кусок переписать нельзя? почему каждый раз нужно исправлять - из версии в версию

    ага. система изменилась :)
    едем в engine\classes\mysql.class.php
    там ищем define ("COLLATE", "1251") и меняем
    нанашу родную define ("COLLATE", "latin1")
  8. golovonog (Посетители)

    20 мая 2013 17:45 6 комментариев
    Ухты какой старый пост, но проблемы всё теже ))) на улице 2013 и я буду опробывать эти три метода на своейм 9,8 =)) Надеюсь все также помогает...
  9. celsoft (Администраторы)

    20 мая 2013 18:31 3 335 комментариев
    Цитата: golovonog
    Ухты какой старый пост, но проблемы всё теже ))) на улице 2013 и я буду опробывать эти три метода на своейм 9,8 =)) Надеюсь все также помогает...

    К версии 9.8 это не имеет никакого отношения. Это вы уже сами что намудрили с кодировкой сайта или БД. Эта тема касалась установки скрипта и версия 9.8 делает это самостоятельно. У вас если и есть проблема, то явно не связанная с тем что описано здесь.
  10. matog (Посетители)

    9 марта 2014 18:58 1 комментарий
    Ничего не помогло а файла mysql.php, вообще нет!
  11. celsoft (Администраторы)

    9 марта 2014 23:29 3 335 комментариев
    Цитата: matog
    Ничего не помогло а файла mysql.php, вообще нет!

    И не поможет. У вас что версия скрипта выпущенная в 2006 году? Это не нужно делать уже много лет. И в актуальных версиях скрипта знаки вопроса могут быть только при физически поврежденной базе данных. Т.е. неверно восстановленной, в неверной кодировке.

Информация

Комментирование публикаций доступно только пользователям имеющим действующую лицензию на скрипт. Если вы уже приобретали скрипт, то вам необходимо зайти на сайт под своим клиентским аккаунтом.

Календарь

«    Февраль 2020    »
ПнВтСрЧтПтСбВс
 12
3456789
10111213141516
17181920212223
242526272829 

Опрос на сайте

Совершаете ли вы покупки в интернет?