За последние 24 часа нас посетили 22842 программиста и 1144 робота. Сейчас ищут 619 программистов ...

Проблема с кодировкой. Вместо русских букв кракозябры.

Тема в разделе "MySQL", создана пользователем Sergey89, 30 янв 2008.

  1. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    и снижынки-сжиныжки))))
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Vladson,
    Если ты это для меня написал - то я знаю о существовании этой функции, уже давно, но не могу использовать из-за более старой версии PHP на хостинге, которым пользуюсь. Переезжать, разумеется, тоже не хочу - много всего перетаскивать и просто нафиг надо - я вообще склонен рассуждать так: "работает - и ладно".
    Ну а то, что новичку посоветовал такой "устаревший" вариант указания кодировки как mysql_query('SET NAMES ...'); - ну да, можно было сказать про mysql_set_charset(); , просто во-первых - привычка, а во-вторых - вдруг у него тоже старая версия php - он тогда снова с вопросом придёт, типа вообще всё перестало работать после добавления этой функции :)

    А каких-то реальных причин, почему это важно, использовать именно mysql_set_charset() вместо mysql_query('SET NAMES ...') - я не вижу.
     
  3. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Не значит что их нет.
    http://phorror.livejournal.com/71614.html
     
  4. travkin

    travkin Новичок

    С нами с:
    9 июл 2013
    Сообщения:
    1
    Симпатии:
    0
    Спасибо! =)
     
  5. Колбася

    Колбася Активный пользователь

    С нами с:
    12 дек 2011
    Сообщения:
    722
    Симпатии:
    0
    utf-8 рулит
     
  6. ShipPhotos.ru

    ShipPhotos.ru Новичок

    С нами с:
    25 фев 2014
    Сообщения:
    2
    Симпатии:
    0
    Адрес:
    Astrakhan
    Тема старая, но к одна из первых в поиске по кракозябрам.

    Ситуация такая, я не программер, но жизнь как говорила заставляет вникать.

    На форуме IPB не отображается кирилическая буква "И", все остальное ОК. Все по настройкам utf8_general_ci - форум и база, все кажется ОК.

    Запрос SHOW VARIABLES LIKE
    character_set_client
    character_set_connection
    character_set_results
    Возвращает utf8

    Саппорт с хостинга посоветовал добавить $INFO['sql_charset'] = 'utf8'; в конфиг форума, на пустом(Тестовом) форуме помогает, на живом же форуме приводит к "Критикал эрор" и форум не работает. Чувствую, что решение где-то рядом, но....

    Да в рнрАдмине посты и темы сообщений записаны полностью кракозябрами. Форум ставил не я...

    Во время установки форума, разбора полетов параметры
    character_set_client
    character_set_connection
    character_set_results
    были cp1251.

    Сейчас все везде равно utf8, но в рнрМайАдмин кириллица кракозябрами, а на форуме все ОК, кроме одной заглавной буквы "И", может что посоветуете, что сделать, что все наладить и не потерять форум?
     
  7. ShipPhotos.ru

    ShipPhotos.ru Новичок

    С нами с:
    25 фев 2014
    Сообщения:
    2
    Симпатии:
    0
    Адрес:
    Astrakhan
    Проблема решена, не мной, но человеком, который ставил форум, была кодировка. Так что все решаемо! База не пострадала, все записи ОК.
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
  9. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    правильно! пусть каждый занимается своим делом.
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
  11. Inspire

    Inspire Новичок

    С нами с:
    12 ноя 2014
    Сообщения:
    5
    Симпатии:
    0
    Всем привет. Перепробовал все способы уже. Но все равно вместо русских буквы выводится это äâà òðè.
    Кодировка в бд - utf8, в конфиге апача прописал AddDefaultCharset utf8 (причем, изначально в httpd.conf не было этой строки вообще), в конфиге пхп добавил default-character-set= utf8, сама страница в utf8.
    Код страницы
    Код (PHP):
    1. <html>
    2. <head>
    3.     <meta http-equiv="content-type" content="text/html; charset=utf8" />
    4. </head>
    5. <body>
    6. <?php
    7. // Соединяемся, выбираем базу данных
    8. header( 'Content-Type: text/html; charset=utf8' );
    9. $link = mysql_connect('localhost', 'root', 'root')
    10.     or die('Не удалось соединиться: ' . mysql_error());
    11. echo 'Соединение успешно установлено';
    12. mysql_query ("SET CHARACTER SET 'utf8'", $link);
    13. mysql_query ("set character_set_client='utf8'"); 
    14. mysql_query ("set character_set_results='utf8'"); 
    15. mysql_query ("set collation_connection='utf8_general_ci'"); 
    16. mysql_query ("SET NAMES utf8"); 
    17. mysql_select_db('test_php') or die('Не удалось выбрать базу данных');
    18.  
    19. // Выполняем SQL-запрос
    20. $query = 'SELECT * FROM clients';
    21. $result = mysql_query($query) or die('Запрос не удался: ' . mysql_error());
    22.  
    23. // Выводим результаты в html
    24. echo "<table>\n";
    25. while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
    26.     echo "\t<tr>\n";
    27.     foreach ($line as $col_value) {
    28.         echo "\t\t<td>$col_value</td>\n";
    29.     }
    30.     echo "\t</tr>\n";
    31. }
    32. echo "</table>\n";
    33.  
    34. // Освобождаем память от результата
    35.  
    36. // Закрываем соединение
    37. mysql_close($link);
    38. ?>
    39. </body>
    40. </html>
    Помогите плз, а то я уже не знаю, что еще делать. Спасибо

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  12. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    у вас однобайтная кодировка. вам надо подключаться в однобайтной кодировке а вы не думая пихаете везде где можно мультибайтную.
     
  13. Inspire

    Inspire Новичок

    С нами с:
    12 ноя 2014
    Сообщения:
    5
    Симпатии:
    0
    В общем проблема решена. Решение в том, что my.ini Надо было поставить кодировку сервера cp1251. И будет все ок. До этого пробовал latin1 и utf8. Только для меня не понятно. Почему надо ставить ему cp1251, когда работаю в utf8. Буду признателен за ответ.
     
  14. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    это вы работаете с ютиэф8. а он хранит данные в сипи1251. видимо сервер на винде. используйте везде юникод и проблем не будет.
     
  15. lopolatos

    lopolatos Новичок

    С нами с:
    26 сен 2015
    Сообщения:
    1
    Симпатии:
    0
    Спасибо! Всё исковырял – не получалось. Видимо не хватало этих строчек:
    Код (Text):
    1.     mysql_query ("set character_set_client='utf8'");
    2.     mysql_query ("set character_set_results='utf8'");
    Не знаю повлияло или нет, но в строке mysql_query("SET NAMES utf8") было в кавычках 'utf8''
    кавычки убрал)
     
  16. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    А теперь, по традиции, которой не один год:

    Выкинь расширение Mysql_ и переходи на Mysqli_.
     
  17. sqwerel

    sqwerel Новичок

    С нами с:
    9 окт 2015
    Сообщения:
    24
    Симпатии:
    0
    Добрый день, прочла всё, что было выше и, возможно, конечно, что-то пропустила, но всё равно не могли бы вы помочь с таким вот вопросом: у меня есть база и после некоторых манипуляций, а именно:
    Код (PHP):
    1. [mysqld]character-set-server = utf8
    2. collation-server = utf8_general_ci
    3. skip-character-set-client-handshake
    4. init_connect='SET collation_connection = utf8_general_ci'
    5. init_connect='SET NAMES utf8'
    6. [client]
    7. default-character-set=utf8
    8. [mysqldump]
    9. default-character-set=utf8
    В файле настроек странички добавила
    $pdo_options=array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
    );
    Сделала и такое на всякий...
    mysql>ALTER DATABASE database CHARACTER SET utf8 COLLATE utf8_general_ci;
    Теперь всё вроде норм:
    mysql> SHOW VARIABLES LIKE 'char%';
    +--------------------------+----------------------------+
    | Variable_name | Value |
    +--------------------------+----------------------------+
    | character_set_client | utf8 |
    | character_set_connection | utf8 |
    | character_set_database | utf8 |
    | character_set_filesystem | binary |
    | character_set_results | utf8 |
    | character_set_server | utf8 |
    | character_set_system | utf8 |
    | character_sets_dir | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)
    но на страничке http://localhost/..... по прежнему DDD и тому подобное. Сделала дамп, в нём сменила кодировку и перезалила, теперь - вместо DDD стоит ИВЦ Как исправить на нормальный язык? И, да, у меня система Debian и решить проблему нужно именно терминальными средствами
    В файле настроек ini.php тоже стоит
    Код (PHP):
    1. $database_connection_charset = 'utf8';
    2.         $database_connection_method = 'SET NAMES';
    3.         $pdo_options=array(
    4.                 PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
    5.         );
    6.  
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  18. VinglVas

    VinglVas Новичок

    С нами с:
    20 ноя 2016
    Сообщения:
    1
    Симпатии:
    0
    Премного благодарен. Всё работает)
     
  19. DAGDOG

    DAGDOG Новичок

    С нами с:
    22 ноя 2016
    Сообщения:
    18
    Симпатии:
    0
    https://php.ru/forum/threads/soobsc...chenija-v-drugoj-kodirovke.60746/#post-492608
     
  20. Elsigo

    Elsigo Новичок

    С нами с:
    16 янв 2018
    Сообщения:
    1
    Симпатии:
    0
    PHP:
    1. $mysqli->query("SET NAMES 'utf8'");
     
  21. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Нет. Это язык Мордора. Не нужно ему звучать здесь.
    Коль уж используешь mysqli, используй его правильно:
    mysqli_set_charset();
     
  22. karmay

    karmay Активный пользователь

    С нами с:
    9 ноя 2017
    Сообщения:
    180
    Симпатии:
    18
    Адрес:
    Н.Новгород
    Когда начинал изучать, было что-то типа дома 5.3 php а в учебном классе 5.6, дома код пишу - кракозябры в БД летят, прихожу преподу показываю - код нормально работает.
    // посмотрел, так и осталось у меня там, и то и то ))
    PHP:
    1. mysqli_set_charset($link, "'utf-8'");
    2. mysqli_query($link, "SET NAMES 'utf8'");
     
  23. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    А смысл? Чтоб наверняка? В программировании это так не работает. Если что-то не срабатывает, нужно искать причину.
    Вот тебе две строчки.
    PHP:
    1. mysqli_set_charset($link,"'utf-8'"); // твое, не сработает
    2. mysqli_set_charset($link,"utf8"); // мое, сработает
    Найди отличия.
     
  24. karmay

    karmay Активный пользователь

    С нами с:
    9 ноя 2017
    Сообщения:
    180
    Симпатии:
    18
    Адрес:
    Н.Новгород
    Потомушто строка. Ну я ж тогда учился, я все пробовал, чтоб заработало, и большими буквами, и маленькими, и с ковычками, и без, и с пробелом, и с дефисом...
    Самое сложное что было с кодировкой, это отправка письма с сайта и прием его на андроид, заголовок всегда приходил кракозябрами, причем только на телефон. Я даже вел некоторую переписку с разработчиками приложения, пытаясь понять в чем дело. Решение нашел только вот такое
    PHP:
    1. $subject = '=?utf-8?B?'.base64_encode('Оповещение от сайта .....').'?=';
     
  25. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    А надо было всего-то зайти в документацию по функции и посмотреть, как правильно.
    --- Добавлено ---
    Юзай phpMailer или Swift. И проблем не будет.