За последние 24 часа нас посетили 17567 программистов и 1687 роботов. Сейчас ищут 943 программиста ...

Запутался с кодировкой

Тема в разделе "PHP для новичков", создана пользователем AlexeySM, 13 дек 2014.

  1. AlexeySM

    AlexeySM Новичок

    С нами с:
    13 дек 2014
    Сообщения:
    4
    Симпатии:
    0
    Что то вообще запутался с кодировкой, делаю какие то костыли-грабли и всёравно не то.
    Подскажите пожалуйста как правильно то?

    Собственно пишу скрипт, который пишет и читает данные из базы данных, содержимое как на русском так и на английском. Поля в базе данных имеют кодировку utf8_general_ci.
    Скрипт пишу в PHP Expert Editor, там внизу есть возмжность выбора как сохранять в UTF-8(или ANSI) и платформа(UNIX или Windows). Ставлю UTF-8 и UNIX.
    Хостинг обычный платный, там у меня сайт на WordPress прекрасно крутиться.

    Проблема 1.
    Когда в скрипте вывожу на экран текст echo "текст русский"; то получаю крюкозябры. Поставил вначале костыль
    Код (Text):
    1. header('Content-Type: text/html; charset=cp1251');
    Вроде поправилось.

    Проблема 2.
    Пишу данные в базу данных, что то типа
    Код (Text):
    1. $dbh = mysql_connect($host, $user, $password) or die("Ошибка");
    2. $result = mysql_query(INSERT INTO `Tables` (`ID`) VALUES ('текст русский'); );
    то получаю в базе данных крюкозябры. Поставил костыль перед выполнением запроса
    Код (Text):
    1. mysql_query("SET NAMES 'cp1251'");
    Вроде тоже поправилось.

    Проблема 3.
    Пишу данные ещё и в XML файл
    Код (Text):
    1. $xml = new DomDocument('1.0','utf-8');
    2. ...
    3. $Element->setAttribute("Name", "текст русский"); // ругается на эту строку string is not in UTF-8
    4. $xml->save('xmlfile.xml');
    Если ставлю костыль $Config ->setAttribute("Name", utf8_encode("текст русский")); получаю крюкозябры
    Пробовал $xml = new DomDocument('1.0','cp1251'); но тоже крюкозябры


    К проблеме 3 я думаю костыль то найду, но мне кажется, что я чего то не понимаю, и можно обойтись без этих вот манипуляций. Подскажите как сделать правильно и грамотно(а не так что бы просто "работало" с костылми).
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Это нормально, можно по умолчанию в ini установить эти параметры, но не на всех хостингах такое дают сделать
    header('Content-Type: text/html; charset=cp1251');
    mysql_query("SET NAMES 'cp1251'"); // только функции mysql_* устарели

    если везде utf8 то странно почему работает при указании cp1251
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    просто все свои данные в юникоде. тогда будет проблема только с данными которые допустим с других сайтов тащим. но там легко будет перегнать в юникод.
     
  4. AlexeySM

    AlexeySM Новичок

    С нами с:
    13 дек 2014
    Сообщения:
    4
    Симпатии:
    0
    Спасибо за информацию.
    Сейчас ещё нагуглил, наткнулся на тему http://phpforum.su/index.php?showtopic=27289, тоже мозги немного подправила.
    Сейчас везде поставил utf-8 и всё заработало.