Проблемы с кодировкой после миграции.

Тема в разделе "Установка и обновление Joomla!", создана пользователем Демон-13, 03.02.2009.

  1. Offline

    Демон-13 Недавно здесь

    Регистрация:
    06.05.2007
    Сообщения:
    87
    Симпатии:
    0
    Пол:
    Мужской
    С помощью компонента миграции, перенес базу joomla 1.0.15 на joomla 1.5.9, но при этом в место нормального шрифта, на сайте отображаются только коряказябины, можно ли это исправить?
     
  2.  
  3. liga
    Offline

    liga Пользователь

    Регистрация:
    21.10.2008
    Сообщения:
    495
    Симпатии:
    18
    Пол:
    Мужской
    Демон-13, Читайте фаг, молодой человек, а еще лучше будет, если вы на новой базе перед экспортом данных, сделаете сравнение в cp1251 и затем экспортируйте.
     
  4. infoman
    Offline

    infoman Недавно здесь

    Регистрация:
    28.08.2007
    Сообщения:
    575
    Симпатии:
    12
    Пол:
    Мужской
    Оффтопик (не в тему) - жми сюда!
     
  5. liga
    Offline

    liga Пользователь

    Регистрация:
    21.10.2008
    Сообщения:
    495
    Симпатии:
    18
    Пол:
    Мужской
    infoman, Только хотел в предыдущем топе сообщить. У меня сейчас PR = 2, но вот ТИЦ к сожалению не обновилось так, как надо, но в вебмастере пишет, что страниц, ссылающихся на меня = 2156
     
  6. infoman
    Offline

    infoman Недавно здесь

    Регистрация:
    28.08.2007
    Сообщения:
    575
    Симпатии:
    12
    Пол:
    Мужской
    Оффтопик (не в тему) - жми сюда!
     
  7. Offline

    gessle Недавно здесь

    Регистрация:
    27.12.2009
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Крякозябры в Joomla 1.5 RE (текст лицензии при установке, всплывающие окна редактора TinyMCE)

    В первую очередь это касается пользователей Денвер, т.к. он по умолчанию работает в кодировке windows-1251.

    Итак, на 100% готовое решение - необходимо в каталоге с Joomla переименовать файл htaccess.txt в .htaccess , добавить в него строку

    AddDefaultCharset UTF-8

    и очистить кэш браузера.

    В последних версиях Joomla RE уже есть эта строка, поэтому остается только переименовать htaccess.txt в .htaccess (правильно - точкаhtaccess)
    [править]
    Какое-то решение проблем с парсером, который не умеет читать русские буквы для php5 и кодировки windows-1251

    Итак. Имеем исходную тему - если мы создаем модуль и в нем указываем url rss-фида написанного в кодировке windows-1251, то на выходе имеем неприятный баг - знаки вопроса вместо буковок. Для решения этого можно попробовать применить следующий патч. Патч будет работать только для php5 с поддержкой iconv и на Joomla RE.

    Прежде всего делаем бэкап всех изменяемых файлов. Не факт что это сработает.

    Идем в \includes\domit\xml_domit_rss_shared.php и ищем функцию function getTextFromFile() в ее конец вставляем вот что

    if ($fileContents == '') {
    $this->establishConnection($filename);
    $response =& $this->httpConnection->get($filename);

    if ($response != null) {
    $fileContents = $response->getResponse();
    }
    }
    }

    preg_match("|<?xml.*encoding=\"(.*)\".*>|Umsi",$fileContents,$m);
    $fileContents = iconv($m[1],'utf-8',$fileContents);
    $fileContents = str_replace($m[1],'utf-8',$fileContents);

    return $fileContents;
    } //getTextFromFile


    Далее в этом же файле ищем функцию function getElementText($elementName) и пишем

    function getElementText($elementName) {
    $elementName = strtolower($elementName);
    return iconv('utf-8','windows-1251',$this->_getElementText($elementName, $this->DOMIT_RSS_indexer));
    //return $this->_getElementText($elementName, $this->DOMIT_RSS_indexer);
    } //getElementText

    Теперь открываем /includes/frontend.html.php и функцию function modoutput_feed(). В ней надо удалить все вхождения

    $что_то_там = mosCommonHTML::newsfeedEncoding( $rssDoc, $что_то_там );

    Я удалил их для переменных (в скобочках указана приблизительная строка): $feed_title (173), $feed_descrip (189), $item_title (226), $text (253)


    То же самое решение для компонента com_newsfeeds (и снова для пхп5).

    Нужно сделать тот же самый хак rss-xml парсера (/includes/domit/xml_domit_rss_shared.php) и удалить строчки (всего их четыре) в файле /components/com_newsfeeds/newsfeeds.html.php в функции function showNewsfeeds()

    $feed_title = mosCommonHTML::newsfeedEncoding( $rssDoc, $feed_title );

    + для переменных $feed_descrip, $item_title, $text.
    [править]
    Как сделать дату в выводимых новостях на русском языке

    Во-первых надо настроить локаль. Для этого идем в глобальную конфигурацию и на вкладке Locale настраиваем локаль страны. Для windows нужно написать ru (или RU), для юникса надо попробовать различные варианты: ru_RU, ru_RU.CP1251. По умолчанию в этом поле стоит en_GB. Во-вторых открываем файл /language/russian.php и находим определение константы

    DEFINE('_DATE_FORMAT_LC',"%A, %d %B %Y");

    Собственно это и есть формат выводимой даты. Если он вас устроит то можно все оставить как есть. Скорее всего (если с локалью все в порядке) дата будет на русском языке. Если он вас не устраивает, то вот возможные модификаторы, которые можно применять здесь (полный список можно увидеть здесь http://ru.php.net/manual/en/function.strftime.php)

    %A - название дня недели в текущей локали
    %B - название месяца в текущей локали
    %d - день месяца в виде десятичного числа (от 01 до 31)
    %H - номер часа от 00 до 23
    %M - минуты
    %S - секунды
    %Y - год, включая столетие
    %y - год, без столетия - последние 2 цифры

    [править]
    Сайт выводится в неверной кодировке. Если выставляю в браузере кодировку вручную, то всё OK

    Все примеры даны для сайта в кодировке windows-1251 (Если кодировка вашего сайта UTF-8 или другая, то в коде надо заменять windows-1251 на вашу кодировку).

    Повторяю для невнимательных - если у вас Joomla 1.5 и выше, то во всех примерах следует заменить windows-1251 как UTF-8

    Очень часто подобная проблема возникает на зарубежных серверах, админам которых неведомы кодировки, кроме iso-8859-1. Возможные пути исправления:

    1. Надо создать файл .htaccess (или дополнить его) (ДА, НЕ УДИВЛЯЙТЕСЬ, ФАЙЛ НАЧИНАЕТСЯ С ТОЧКИ) следующей строчкой:

    AddDefaultCharset windows-1251

    или сразу три директивы

    AddDefaultCharset windows-1251
    CharsetSourceEnc windows-1251
    CharsetDisable On

    2. Проверьте, что написано в строке

    <meta http-equiv="Content-Type" content="text/html; .... />

    файла index.php шаблона. Часто эта строка написана с ошибкой или же там жестко задана кодировка. Попробуйте заменить на эту строку на:

    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

    3. Проверьте http-заголовок ответа сервера. Для этого зайдите на эту страницу, введите адрес своего сайта и затем ищите строку с Content-Type.
    Должно быть так

    Content-Type: text/html; charset=WINDOWS-1251

    ТОЛЬКО ДЛЯ JOOMLA 1.0: Если такой строки вообще нет, то открываем файл index.php в корне Joomla и добавляем

    header( 'Content-Type: text/html; charset=windows-1251' );

    после

    header( 'Pragma: no-cache' );

    [править]
    Я поставил Joomla а там везде нечитаемый текст вместо русских букв

    Тут возможны два варианта решения - простой и сложный. Простой состоит в добавлении некоторых запросов в файл database.php, а сложный в полной переустановке Joomla.

    1. Сами запроcы, которые надо добавить, приведены во втором пункте данного вопроса. Просто дописываем куда надо mysql_query и проверяем как работает сайт. Если знаков вопроса или закорючек больше нет, значит все нормально. Ничего больше делать не надо.

    2. Промежуточный вариант - подходит если вы только что установили Joomla, а вместо букв знаки вопроса. Вам надо внести изменения в файл database.php восстановить папку installation из дистрибутива и удалить файл configaration.php. После этого надо попробовать установить ее снова. Должно сработать.

    3. Если первый пункт не сработал, то надо ее переустановить. Но до этого сделать несколько дополнительных вещей (Этот способ решения проблемы не относится к варианту, когда у вас уже стоит и работает сайт, и вы начинаете в таблицах менять кодировки, это не поможет - здесь рассматривается вопрос "я поставил - русских буковок нет", вопросы переноса сайта тут не рассматриваются, если вы хотитет узнать именно про тот как же переносить сайт с локального компьютера в интернет - прочтите статью Перенос Joomla). Ниже описана последовательность действий:

    * В phpMyAdmin изменить кодировку для вашей базы в cp1251 (или создать базу в этой кодировке)
    * Открыть /installation/sql/joomla.sql и заменить каждую команду создания таблицы (таблиц много)

    Заменить

    CREATE TABLE `#__какая-то_таблица` (

    на

    CREATE TABLE `#__какая-то_таблица`(

    поле1 таблицы,
    поле2 таблицы
    )
    {ТУТ МОЖЕТ СТОЯТЬ TYPE=MyISAM ИЛИ AUTO_INCREMENT=1} DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;

    Подправить файл /includes/database.php примерно на 100 строке, так что бы там было следующее

    $this->_table_prefix = $table_prefix;

    @mysql_query("SET NAMES 'cp1251'", $this->_resource);
    @mysql_query( "set session character_set_server=cp1251", $this->_resource );
    @mysql_query( "set session character_set_database=cp1251", $this->_resource );
    @mysql_query( "set session character_set_connection=cp1251", $this->_resource );
    @mysql_query( "set session character_set_results=cp1251", $this->_resource );
    @mysql_query( "set session character_set_client=cp1251", $this->_resource );

    $this->_ticker = 0;
    $this->_log = array();

    Только после этого можно попытаться ее ставить


    [править]
    Ситуация вокруг Joomla и UTF-8

    Общеизвестно, что кодировка UTF считается самой оптимальной для создания многоязычных сайтов. Конечно, если текст на сайте написан в одной кодировке (просто на русском языке), то большого смысла задумываться о ней нет. Так же ее можно не применять на псевдо-двуязычных сайтах на которых расположен текст на английском языке и каком-либо другом, потому что английский язык в любой кодировке всегда будет выводиться правильно (набор символов a-zA-Z).

    Не надо думать, что сделав поддержку UTF на своем сайте вы сразу же попадаете в касту тех, кто может использовать UTF-расширения сторонних производителей. Чаще всего заявление "UTF-совместимости" не имеет ничего общего с реальностью и несет лишь цель прорекламировать себя в лучшем свете. О реальной работе с UTF никто не задумывается, потому что чаще всего такие расшерения производят англоговорящие программисты, для которых набор букв a-zA-Z в какой угодно кодировке будет всегда одним и тем же.

    Вопрос встает лишь тогда, когда нам нужно создать реальную многоязычность, точнее не многоязычность а именно обеспечить наличие двух различных языков (например, русского и французского) на одной и той же странице. Можно конечно писать все тексты в кодировке ISO-8859, но минус таких текстов будет в том, что размеры базы данных для их хранения будут непозволимо большими, да и кроме того стандартных способов реализовать ввод сразу двух и более различных наборов символов не может ни один редактор.

    Выходом является использование кодировки UTF. Для сайтов построенных на Joomla версии 1.5 и выше проблем в принципе не может возникнуть - она в полной мере ее поддерживает.

    Для версий 1.0.x проблемы возникают. Необходимо отметить, что простая перекодировка текста из кодировки cp1251 (локализованная версия) в UTF-8 проблемы не решает. Для обеспечения работы с UTF требуется поддержка именно на уровне CMS (или PHP). В 1.5 и далее такая поддержка есть, в 1.0.х ее нет (поддержка касается работы строковых функций).

    Существует половинчатый выход из данной ситуации - использовать перекодированную в UTF русскую локализацию. В данной версии база данных тоже использует данную кодировку для хранения данных и для передачи запросов внутри соединения (utf8_general_ci). Помимо этого кодировка в шаблоне тоже должна быть UTF-8. Скорее всего проблем не возникнет. Но если возникнут - никто ответственности не несет, по понятным обстоятельствам. Полного решения для версий 1.0.х не существует (иначе как переписать некоторую часть самой CMS).


    [править]
    Как вылечить плохую кодировку дампа, если данные на сайте отображаются нормально, но читаемый дамп создать не удается

    1. Во-первых получаем чистый дамп файла при помощи консольной утилиты (нужен доступ по SSH)

    mysqldump.exe -u ИМЯ_ПОЛЬЗОВАТЕЛЯ -p ПАРОЛЬ --default-character-set=latin1 > sitedump.sql

    2. В файле sitedump.sql заменяем

    CHARSET=utf8; на CHARSET=cp1251;

    3. В начале этого файла добавляем строчку если её нет

    set names cp1251;

    4. (Не обязательно) Если дамп читаем то спасаем себя от дальнейших проблем залив его в свежесозданную таблицу.
     

Поделиться этой страницей

Загрузка...