从mysql表中读取utf-8内容

时间:2010-09-10 05:25:11

标签: php mysql utf-8

我有一个内容为

的mysql表

结构在这里:

alt text

现在我有一条记录:

alt text

我想阅读并将此表的内容打印到html 这是我的代码:

<?php

    include("config.php");
    $global_dbh = mysql_connect($hostname, $username, $password)
    or die("Could not connect to database");
    mysql_select_db($db)
    or die("Could not select database");
    function display_db_query($query_string, $connection, $header_bool, $table_params) {
        // perform the database query
        $result_id = mysql_query($query_string, $connection)
        or die("display_db_query:" . mysql_error());
        // find out the number of columns in result
        $column_count = mysql_num_fields($result_id)
        or die("display_db_query:" . mysql_error());
        // Here the table attributes from the $table_params variable are added
        print("<TABLE $table_params >\n");
        // optionally print a bold header at top of table
        if($header_bool) {
            print("<TR>");
            for($column_num = 0; $column_num < $column_count; $column_num++) {
                $field_name = mysql_field_name($result_id, $column_num);
                print("<TH>$field_name</TH>");
            }
            print("</TR>\n");
        }
        // print the body of the table
        while($row = mysql_fetch_row($result_id)) {
            print("<TR ALIGN=LEFT VALIGN=TOP>");
            for($column_num = 0; $column_num < $column_count; $column_num++) {
                print("<TD>$row[$column_num]</TD>\n");
            }
            print("</TR>\n");
        }
        print("</TABLE>\n"); 
    }

    function display_db_table($tablename, $connection, $header_bool, $table_params) {
        $query_string = "SELECT * FROM $tablename";
        display_db_query($query_string, $connection,
        $header_bool, $table_params);
    }
    ?>
    <HTML><HEAD><TITLE>Displaying a MySQL table</TITLE></HEAD>
    <BODY>
    <TABLE><TR><TD>
    <?php
    //In this example the table name to be displayed is  static, but it could be taken from a form
    $table = "submits";

    display_db_table($table, $global_dbh,
    TRUE, "border='2'");
    ?>
    </TD></TR></TABLE></BODY></HTML>

但是我得到了????????结果如下: 这是输出: alt text

我的错误在哪里?

7 个答案:

答案 0 :(得分:23)

始终获得正确编码的UTF-8文字的四个好步骤:

1)在任何其他查询之前运行此查询:

 mysql_query("set names 'utf8'");

2)将其添加到您的HTML头:

 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

3)在PHP代码的顶部添加:

 header("Content-Type: text/html;charset=UTF-8");

4)使用Notepad++或任何其他优秀的文本编辑器/ IDE,使用UTF-8 without BOM编码保存文件。

答案 1 :(得分:6)

您没有将HTML页面定义为UTF-8。有关如何执行此操作的信息,请参阅this question

可能还需要将数据库连接显式设置为UTF8。做一个

mysql_query("SET NAMES utf8;");

^ 将其放在数据库连接脚本下或包含并确保在执行任何必要的查询之前放置它。此外,为搭配请花时间确保你的 将它设置为正确的语法类型和general_ci在使用时似乎对我有用。作为结局,在敲击您的头部后清除缓存,将浏览器设置为正确的编码工具栏 - &gt; view-&gt; encoding

建立连接后设置与UTF8的连接可以解决问题。如果第一步已经有效,请不要这样做。

答案 2 :(得分:6)

将字符集设置为 utf8 ,如下所示:

$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");

答案 3 :(得分:0)

试试这个:

mysql_set_charset('utf8', $yourConnection);

答案 4 :(得分:0)

旧方法已被弃用。如果您使用的是PHP&gt; 5.0.5并使用mysqli new syntax现在是:

$connection->set_charset("utf8")

$connection是对您与DB的连接的引用。

答案 5 :(得分:0)

我尝试了几种解决方案,但唯一可行的 是Hari Dass的:

$ conn-> set_charset(“ utf8”);

答案 6 :(得分:0)

带有PDO的MySQL表中的UTF-8内容

要使用PDO从MySQL表中正确获取拉丁字符等,

PHP手册网站中有一个来自“用户贡献的注释”的隐藏信息

(疯狂的是,最初,这个贡献被低估了,现在幸运的是变成了积极的..有时候有人需要受到指责)

我的信用额度归功于this article,这拉扯了解决方案,并可能使“ User Contributed Note”变成了积极的征兆

如果您希望使用正确的Unicode字符建立干净的数据库连接

    $this->dbh = new PDO(
    "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=utf8", 
    DB_USER, 
    DB_PASS);