php 4.4.2 + mysql 4.1 + utf8

swop

Новичок
php 4.4.2 + mysql 4.1 + utf8

Уважаемые Коллеги,

Проблема в том что в БД хранятся значения в кодировке UTF8 а PHP выводит непонятно что. То есть русские символы при выводе отсутствуют.... как исправить?
 

swop

Новичок
хмм, это необходимо вызывать после каждого коннекта?
 

440hz

php.ru
Автор оригинала: swop
хмм, это необходимо вызывать после каждого коннекта?
после коннекта к базе _сразу_ выдать mysql_query('SET NAMES UTF8'). после этого все данные тебе придут в utf-8
 

swop

Новичок
Автор оригинала: 440hz
после коннекта к базе _сразу_ выдать mysql_query('SET NAMES UTF8'). после этого все данные тебе придут в utf-8
непомогло в смысле не работает

PHP:
<?php
   $link = mysql_connect("localhost", ".....", "....") or die("Could not connect : " . mysql_error());
   print "Connected successfully";

   mysql_query ("SET NAMES UTF8") or die;

   mysql_select_db("promo5") or die("Could not select database");

   $query = "SELECT * FROM job";
   $result = mysql_query($query) or die("Query failed : " . mysql_error());

   print "<table>\n";
   while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
       print "\t<tr>\n";
       foreach ($line as $col_value) {
           print "\t\t<td>$col_value</td>\n";
       }
       print "\t</tr>\n";
   }
   print "</table>\n";

   mysql_free_result($result);
   mysql_close($link);
?>
на страницу выдаётся вот такая херь

Код:
&#208;&#162;&#209;?&#208;µ&#208;±&#208;&#190;&#208;&#178;&#208;°&#208;&#189;&#208;&#184;&#209;&#143;:

&#208;&#339;&#209;&#402;&#208;¶&#209;‡&#208;&#184;&#208;&#189;&#208;°/&#208;¶&#208;µ&#208;&#189;&#209;‰&#208;&#184;&#208;&#189;&#208;°, 23-30 &#208;»&#208;µ&#209;‚.

&#208;’&#209;‹&#209;&#129;&#209;&#710;&#208;µ&#208;µ &#208;&#190;&#208;±&#209;?&#208;°&#208;·&#208;&#190;&#208;&#178;&#208;°&#208;&#189;&#208;&#184;&#208;µ (&#208;»&#208;&#184;&#208;&#189;&#208;&#179;&#208;&#178;&#208;&#184;&#209;&#129;&#209;‚&#208;&#184;&#209;‡&#208;µ&#209;&#129;&#208;&#186;&#208;&#190;&#208;µ/&#209;„&#208;&#184;&#208;»&#208;&#190;&#208;»&#208;&#190;&#208;&#179;&#208;&#184;&#209;‡&#208;µ&#209;&#129;&#208;&#186;&#208;&#190;&#208;µ).
 

swop

Новичок
Почему CP1251? данну хранятся в UTF8, CHARSET на таблицах UTF8. В любом случае это не помогло......


ps: тестовый скрипт на perl делающий выборку нормально выводит в браузер UTF8 текст.
 

White Rabbit

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

swop

Новичок
Автор оригинала: White Rabbit
CP - потому, что то место, куда ты их выводишь, ожидает CP.
Можно конечно послать заголовок с charset,
но в этом случае все данные, не только из базы, будут интерпретироваться как UTF
то место как раз и ожидает UTF8 ибо сайт полностью сделан в UTF8 кодировке, ru, en, fr.
 

White Rabbit

белый кролик
В какой кодировке браузер отображает страницу?
То, что вы предъявили, - это utf8 в cp1251.
Проверьте заголовки, отдаваемые браузеру.
 

swop

Новичок
причем тут заголовки? я в браузере вручную выставил UTF8
 

440hz

php.ru
1. на броузер не расчитывай.
2. если все надо в UTF8, то выдавай соответствующие header().
header ("content-type: text/html; charset=utf-8");
 

tigerman

Новичок
а я думал как раз наоборот, что вернее выставить в браузере в ручную, ведь все эти заголовки он воспринимает как пожелания, а не как приказания. Или я не прав?
 

Romantik

TeaM PHPClub
tigerman
браузер живет своей жизнью...
дайте ему понять, что вы от него хотите
 

swop

Новичок
В общем, Коллеги, забудьте вы про браузер, он тут ни одной ногой. Проблема решилась установкой SET CHARSET=latin1, но в этом случае будет неправильно работать сортировка :( хз чё делать.

Если ставишь latin1 php выводит в браузер нормальный UTF8 без предварительного SET NAMES UTF8.
 

440hz

php.ru
swop
если ставить latin1, то он выводит ОДНОБАЙТНЫЕ символы.

сделай так, как дяди говорят ...

покажи ссылку, где ломается?
 

swop

Новичок
и что? ,браузер нормально отображает двухбайтовые символы юникод. Засада в том что при latin1 (с котором собран libmysql) нет перекодировки. Если в БД charset=utf8 а клиент использует latin1 то происходит перекодировка, именно тут символы юникод теряют свое значение. По идее SET NAMES должен помочь, но по факту это не работает!
 

440hz

php.ru
swop
если у тебя в базе UTF-8 и страница отдаетс в UTF-8 то в чем трабл-то? что-то я не понимаю ...

а судя по твоим постам ты страницу отдаешь в cp1251.
 
Сверху