1

Тема: Проблемы с кодировкой

Я начал учить PHP и вот 3 дня назад столкнулся с проблемой,когда я делаю выборку из бд у меня выводится некоторое количество вопросов. Не поймите меня неправильно я уже 3 дня над этим бьюсь пробовал многое множество способов для решения данной проблемы(в том числе многие из них я нашёл на вашем форуме) может быть я что то нетак делаю ?
подскажите

2

Re: Проблемы с кодировкой

1) Посмотрите как данные выглядят в phpMyAdmin и какая указана кодировка таблиц в БД.
2) В какой кодировке страницы сайта и какой прописан мета-тег кодировки.
3) Проверьте, чтобы скрипт подключался не под root. Выделите для скрипта отдельного пользователя назначив ему права на требуемую БД.
4) В скрипте, сразу после функции подключения mysql_connect пропишите строку устанавливающую кодировку соединения с MySQL. Для windows-1251 будет cp1251, для utf-8 будет utf8.

mysql_query('SET NAMES cp1251');

3 (изменено: vaims, 2011-09-02 15:28:41)

Re: Проблемы с кодировкой

1)Кодировку при создании таблицы я ставил 1251_general_ci  извиняюсь но я недопонял в смысле как они выглядят ?
2)Кодировка сайта utf-8 <meta http-equiv="Content-Type" content="text/html"; charset=utf-8" />
Вот код

$db=mysql_connect("localhost","admin","1");
mysql_select_db("table",$db);
$result=mysql_query("SELECT * FROM `guard`",$db);
$myrow=mysql_fetch_array($result);

echo $myrow["lastname"];
3)Подключаюсь я не под root  smile
4)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html"; charset=utf-8" />
<title>Документ без названия</title>
</head>

<body>
<?

$db=mysql_connect("localhost","admin","1");
mysql_query("SET NAMES 'utf8′");
mysql_query("SET CHARACTER SET 'utf8′");
mysql_select_db("table",$db);
$result=mysql_query("SELECT * FROM `guard`",$db);
$myrow=mysql_fetch_array($result);


echo $myrow["lastname"];


?>
</body>
</html>

Насколько я понял вы вот это имели в виду?может я что то не допонял ?

4

Re: Проблемы с кодировкой

vaims сказал:

1)Кодировку при создании таблицы я ставил 1251_general_ci  извиняюсь но я недопонял в смысле как они выглядят ?

Вас должно было смутить, что в БД кодировка 1251_general_ci, а страницы сайта в utf-8. Создайте таблицы в кодировке utf8_general_ci. Это должно решить проблему.

Я имел в виду - как выглядит кириллица в phpMyAdmin, можете ли вы ее прочесть, или там крякозябы.

Еще один момент - не только под root нельзя подключаться, но под любым пользователем имеющим глобальные привилегии из раздела администрирование. Проверьте пользователя admin, чтобы у него не было лишних привилегий.

5

Re: Проблемы с кодировкой

Уважаемый ханут сделал всё как вы сказали результат тот-же +(( А в базе данных всё норм  ввёдённые символы выглядят нормально +)

6

Re: Проблемы с кодировкой

vaims сказал:

ввёдённые символы выглядят нормально +)

Вы сменили кодировку таблиц на utf8? Если сменили, то посмотрите как выглядят новые данные, а не те, что были записаны ранее.

7

Re: Проблемы с кодировкой

Нет я просто создал новую таблицу(старую я удалил).

8

Re: Проблемы с кодировкой

vaims сказал:

Нет я просто создал новую таблицу(старую я удалил).

И какая теперь кодировка у таблиц?

9 (изменено: vaims, 2011-09-03 14:29:46)

Re: Проблемы с кодировкой

http://s009.radikal.ru/i310/1109/b7/675a7ab5ca1d.jpg

10

Re: Проблемы с кодировкой

Все хорошо. Проблем быть не должно.

Проверьте кодировку страницы скрипта, она должна быть UTF8. Проще всего увидеть кодировку файла в редакторе Notepad++, снизу, в статусной строке, где будет либо UTF8, либо ANSI.

11

Re: Проблемы с кодировкой

http://s43.radikal.ru/i102/1109/b1/c01e76f92929.jpg

12

Re: Проблемы с кодировкой

Больше нет никаких идей, кроме прав из раздела "Администрирование" у пользователя admin.

13

Re: Проблемы с кодировкой

hmm Права я также дал только самые необходимые .. ладно попробую на ноуте

Re: Проблемы с кодировкой

Видимо мы с vaims пользуемся одинаковым учебным материалом, но у нас немного различные трудности.
В составе материалов были MySQL-3.23.53 (phpMyAdmin-2.5.6) и PHP-4.3.9 и Apache-3.11.0.0.
Загвоздка возникает в том же месте, что и у vaims (выборка из базы и вывод данных из базы в цикле). Когда я в адресной строке браузера (Opera 11.51), прописываю localhost/php/mysql.php, то у меня данные отображаются так:

http://i28.fastpic.ru/big/2012/0203/a2/ … 05e0a2.jpg

http://i31.fastpic.ru/big/2012/0203/58/ … 496758.jpg

Поскольку с MySQL я пока что даже не на Вы, а на Ваше Величество, прошу объяснить, как тут поступить: мне говорили про переконвертацию базы, но для меня пока что это как заклинание непереводимое. Либо может поставить другие версии программ (только не знаю насколько будут расхождения в таком случае с учебными материалами)?

15

Re: Проблемы с кодировкой

Серёг@6696rus сказал:

то у меня данные отображаются так

Пока я вижу только одну проблему - кодировка скрипта utf8, кодировка данных в БД cp1251. Очевидно, что с такими условиями ничего работать не будет, поэтому проверьте кодировку файла скрипта, для чего откройте его в Notepad++ и посмотрите в строке статуса кодировку и в случае необходимости смените ее на ANSI, что позволит работать с cp1251 в БД.

Разумеется, в метатеге кодировки в скрипте должна быть указана кодировка windows-1251.

16

Re: Проблемы с кодировкой

Серёг@6696rus сказал:

Когда поменял на  ANSI (если в данном случае это нужно было делать)

Это надо было сделать, все правильно.

Теперь посмотрите какую кодировку показывает в браузере и какие данные выводятся в искаженном виде, те что в скрипте, или те что в БД.

Re: Проблемы с кодировкой

прошу прощения, я не конвертировал там, а энкодировал... сейчас получилось  smile

18

Re: Проблемы с кодировкой

Hanut, Огромная благодарность!!! (зарегистрировался только чтоб поблагодарить smile ) Прям точь-в-точь та же проблема что и у Серёг@6696rus! Несколько дней не вылезал из форумов, обучающих материялов, менял скрипты, вставлял всякие...
mysql_set_charset( 'utf8' );
echo iconv( 'cp1251', 'utf-8', 'Текст!' );

И в итоге попал сюда и вы все пошагово объяснили, Спасибо!)

19

Re: Проблемы с кодировкой

bad956 сказал:

Спасибо!

Пожалуйста. Очень рад, что вы смогли решить проблему с нашей помощью. smile

20

Re: Проблемы с кодировкой

Проблема с кодировкой! Получается на сайту русский язык отображает, но при добавление в базу запроса, идут иероглифы! Сама база у меня в кодировке latin1_swedish_ci, MySQL-кодировка: UTF-8 Unicode (utf8), Сопоставление соединения с MySQL:cp1251_general_ci, все скрипты в кодировке 1251, что не так?

21

Re: Проблемы с кодировкой

Insaider сказал:

Сама база у меня в кодировке latin1_swedish_ci

Вероятно проблема в том, что таблицы должны быть в кодировке cp1251_general_ci.

Так же, в скрипте сразу после функции mysql_connect() добавьте строку:

mysql_query('SET NAMES cp1251');

22

Re: Проблемы с кодировкой

Hanut сказал:
Insaider сказал:

Сама база у меня в кодировке latin1_swedish_ci

Вероятно проблема в том, что таблицы должны быть в кодировке cp1251_general_ci.

Так же, в скрипте сразу после функции mysql_connect() добавьте строку:

mysql_query('SET NAMES cp1251');

Тоесть мне нужно переписать или перекодировать базу cp1251_general_ci

23

Re: Проблемы с кодировкой

Insaider сказал:

Тоесть мне нужно переписать или перекодировать базу cp1251_general_ci

Необходимо перекодировать. Просто менять сравнение таблиц нельзя! Процесс перекодировки зависит от того, как данные выглядят в phpMyAdmin, читается ли кириллица или нет.

24

Re: Проблемы с кодировкой

Перекодировал с помощью программы MySQL-Front в cp1251_general_ci, проблема не исчезла все русские буквы вот так:
"???????"
Мой conf.php:

<?
$base_name="localhost";
$base_user="new";
$base_pass="123";
$db_name="new";
$break = "0";
$give_all_gift=0;
$bonus=100; //100% gonderilen meblegden

#if (getenv('REMOTE_ADDR')=="85.132.96.76") $break = "0";else $break = "1"; 

$faiz=1;
$d=date("w");
$days=array(6,0);
#if (date("G")<9)$faiz=1.5;
if (in_array($d,$days))$faiz=3;
#if ($d==0)$faiz=3;
#if ((date(n)==12 && date(j)==31) || (date(n)==1 && date(j)==1))$faiz=4; //new year
#if (date(n)==2 && date(j)==3)$faiz=3;//2 fevral gencler gunu
#if (date(n)==2 && date(j)==14)$faiz=2;//14fevral
#if (date(n)==2 && date(j)==21)$faiz=3;//I cerwenbe
#if (date(n)==2 && date(j)==23)$faiz=2;//23 fevral
#if (date(n)==2 && date(j)==28)$faiz=2;//II cerwenbe
#if (date(n)==3 && date(j)==6)$faiz=2;//III cerwenbe
#if (date(n)==3 && date(j)==8)$faiz=3;//8mart
#if (date(n)==3 && date(j)==13)$faiz=3;//IV cerwenbe
#if (date(n)==3 && (date(j)==20 || date(j)==21)) $faiz=4; //NOVRUZ 
#if (date(n)==4 && date(j)==1)$faiz=2;//1 Aprel
if (date(n)==5 && date(j)==10)$faiz=3;//10 may gul bayrami
if (date(n)==5 && date(j)==28)$faiz=3;//28 may
if (date(n)==6 && date(j)==1)$faiz=3;//1iyun uwaqlar gunu
if (date(n)==6 && date(j)==15)$faiz=2;//15 iyun Milli Qrutuluw Gunu
if (date(n)==6 && date(j)==26)$faiz=2.5;//26 iyun Silahli Quvveler gunu
#if (date(n)==8 && (date(j)==4 || date(j)==5))$faiz=2.5; //birthday 06.08
#if (date(n)==8 && date(j)==6)$faiz=4; //birthday
#if (date(n)==8 && date(j)==31)$faiz=3; //31 avqust orucluq bayrami
#if (date(n)==10 && date(j)==18)$faiz=2; //Musteqillik Gunu
#if (date(n)==11 && date(j)==7)$faiz=3; //Qurbanliq Bayrami
#if (date(n)==11 && date(j)==8)$faiz=2; //Qurbanliq Bayrami
#if (date(n)==11 && date(j)==9)$faiz=3; //Bayraq Gunu
?>

25

Re: Проблемы с кодировкой

Если в phpMyAdmin вы видите кириллицу, то в скрипте установите кодировку соединения с MySQL дописав сразу после вызова функции mysql_connect() строку:

mysql_query('SET NAMES cp1251');