PHP:西里尔语(俄语)字符作为问号回应。为什么?

时间:2011-12-05 22:35:00

标签: php mysql encoding character-encoding special-characters

我在DB中有一个带有俄语值的项目。 我需要做的就是回应它们,但事实证明它比预期更困难。 所有俄罗斯人都只是打印成问号。 IE:??? ? ??????? 对于我尝试过的每种编码,所有英文字符都打印得很好。

为了简化我的故障排除,我在沙箱中玩游戏:

<?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'</pre>';

    $str = $row['russian'];
    $str = mb_convert_encoding($str, "UTF-8", "KOI8-R");
    echo $str;
}
?>

表字段具有koi8r_general_ci排序规则。 我尝试将其更改为ut8_bin和utf8_unicode_ci。 似乎都没有帮助,所以我把它改回来了。

正如您所看到的,我尝试了几种编码。 我还没找到修复方法。 我绝望了:)

~Mo

仅供参考:我在Win7-64上使用NetBeans进行编码。 Server = WAMP堆栈。

1 个答案:

答案 0 :(得分:12)

解决!! 问题归结为一个简单的连字符。

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,以防它有用。)

我希望这会在某个时间点帮助别人。 〜莫

仅供参考:这是我的沙盒脚本,效果很好

/* 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'</pre>';  // For Testing ---->
}

mysql_close($link);