在网页上显示中文文本

时间:2012-01-23 23:37:26

标签: html unicode utf-8 character-encoding cjk

以前曾经问过这个问题,但是其他海报的关注更多地与文档的原始编码有关。

我有一个包含一些中文文本的MySQL数据库。我用于这些字段的排序规则是utf8_unicode_ci。使用phpMyAdmin并浏览数据库,中文文本应该显示出来。当我尝试在网页上显示此文本时,我得到?????在它的位置。这是我的代码:

<html>
    <?php
        header('Content-Type: text/html; charset=UTF-8');
    ?>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <?php
        // Code opening database and retrieving fields and such...

我有什么遗失的吗?我也尝试将PHP header()调用移到<html>标记之上,但这也不起作用。

编辑:以下是数据库代码:

$con = mysql_connect("localhost", "name", "pass") or die('Sorry, could not connect to database server');
mysql_select_db("database_name", $con) or die('Sorry, could not connect to database');
$query = "SELECT id,field1,field2 FROM table1 ORDER BY id ASC";
$result = mysql_query($query) or die('Sorry, could not get recipes at this time ');

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
            $id = $row['id'];
            $var1= $row['field1'];
            $var2= $row['field2'];
            echo"ID:$id The contents are $var1 and $var2.<br><br>\n";
 }

更新:所以我已经解决了使用行mysql_set_charset('utf8', $con);将存储的中文字符作为UTF-8读取的问题,但我发现当我想要添加到这个数据库,中文文本显示为?????再次。例如,如果我将一串中文字符保存为变量

$chinese = "炒猪肉与蔬菜";
echo "$chinese<br>";

这显示?????再次。有线索吗?

感谢。

3 个答案:

答案 0 :(得分:1)

有时实际的文件编码是错误的。尝试打开“Notepad ++”中的输出文件,看看它在右下角检测到的编码。如果它不是utf-8,则在同一个“Notepad ++”中将其转换为utf-8。

答案 1 :(得分:0)

这是一个很好的资源:Handling Unicode Front to Back in a Web App

初始问题的解决方法是在第mysql_set_charset('utf8', $con);行之后添加第mysql_select_db();行。

答案 2 :(得分:0)

您的网页没问题,所以问题可能是SQL字符集。您已经正确设置了charset。如果在检索数据时仍然看到问号,则很可能是因为您以错误的方式保存了问号。每当您想将Unicode保存到数据库时,请在字符串前使用 N

INSERT INTO table VALUES N'炒猪肉与蔬菜'