PHP: кириллические (русские) символы повторяются как вопросительные знаки. Зачем? - PullRequest
3 голосов
/ 06 декабря 2011

У меня есть проект с русскими значениями в БД.Все, что мне нужно сделать, это повторить их, но это оказывается сложнее, чем ожидалось.Все русские буквы просто печатаются как вопросительные знаки.IE: ???????????Все английские буквы печатаются просто отлично для каждой кодировки, которую я пробовал.

Чтобы упростить поиск неисправностей, я играю в своей песочнице:

<code><?php
//header('Content-Type: text/html;charset=koi8-r'); 
//header('Content-Type: text/html;charset=windows-1251');
header('Content-Type: text/html;charset=utf-8');

if(!$link = mysql_connect('localhost', 'id', 'pass')) die('Could not connect: ' . mysql_error());

//mysql_set_charset('ISO-8859-1',$link);
//mysql_set_charset('ISO-8859-5',$link);
//mysql_set_charset('windows-1251',$link);
mysql_set_charset('UTF-8',$link);
//mysql_set_charset('KOI8-R',$link);

if (!$db = mysql_select_db('db', $link)) die ("Can't use DB : " . mysql_error());

$result = mysql_query('SELECT * FROM book');
while($row = mysql_fetch_assoc($result))  {
    echo'<pre>';print_r($row);echo'
';$ str = $ row ['russian'];$ str = mb_convert_encoding ($ str, "UTF-8", "KOI8-R");echo $ str;}?>

Поле таблицы имеет сопоставление koi8r_general_ci.Я попытался изменить его на ut8_bin и utf8_unicode_ci.Похоже, ни один из них не помог, поэтому я вернул его обратно.

Как видите, я пробовал несколько кодировок.Я еще не нашел исправления.Я впадаю в отчаяние:)

~ Mo

К вашему сведению: я пишу код в NetBeans на Win7-64.Сервер = стек WAMP.

1 Ответ

12 голосов
/ 07 декабря 2011

РЕШИТЬ !! Проблема сводилась к простому дефису.

Как найдено на http://punbb.ru/viewtopic.php?id=1222 Я изменил это ...

mysql_set_charset('UTF-8',$link);

.. к этому ...

mysql_set_charset('UTF8',$link);

.. и все прекрасно работает.

(В процессе пробного использования я также сталкивался с http://developer.loftdigital.com/blog/php-utf-8-cheatsheet, на случай, если это будет полезно.)

Надеюсь, это поможет кому-то другому в какой-то момент времени. ~ Мо

К вашему сведению: вот мой сценарий с песочницей, который отлично работает

<code>/* SANDBOX */
if(!$link = mysql_connect('localhost','user','pass')) die('Could not connect: ' . mysql_error());
mysql_set_charset('UTF8',$link);

if (!$db = mysql_select_db('db', $link)) die ("Can't use $_DB : " . mysql_error());

$result = mysql_query('SELECT * FROM book');
while($row = mysql_fetch_assoc($result))  {
    echo'<pre>';print_r($row);echo'
'; // Для тестирования ----> } mysql_close ($ ссылка);
...