从 mysql 表中读取 utf-8 内容
Posted
技术标签:
【中文标题】从 mysql 表中读取 utf-8 内容【英文标题】:reading utf-8 content from mysql table 【发布时间】:2011-04-10 14:11:34 【问题描述】:我有一个包含内容的 mysql 表
结构在这里:
现在我有一条记录:
我想读取该表的内容并将其打印为 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>
但我明白了??????????结果: 这是输出:
我的错误在哪里?
【问题讨论】:
【参考方案1】:带有 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);
【讨论】:
【参考方案2】:我尝试了几种解决方案,但唯一有效的解决方案 是哈里达斯的:
$conn->set_charset("utf8");
【讨论】:
【参考方案3】:将字符集设置为utf8,如下:
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");
【讨论】:
这很有帮助!! 谢谢。实际上,我的问题是从 mysql 获取数据时。因此这对我有用。(请确定问题出在哪里)。【参考方案4】:旧方法已被弃用。如果您使用 PHP > 5.0.5 并使用 mysqli,则 new syntax 现在是:
$connection->set_charset("utf8")
其中$connection
是对您与数据库的连接的引用。
【讨论】:
【参考方案5】:试试这个:
mysql_set_charset('utf8', $yourConnection);
【讨论】:
【参考方案6】:您没有将 HTML 页面定义为 UTF-8。请参阅 this question 了解如何做到这一点。
您可能还需要将数据库连接显式设置为 UTF8。做一个
mysql_query("SET NAMES utf8;");
^ 将它放在您的数据库连接脚本下或包含并确保在您进行任何必要的查询之前将其放置。此外,对于搭配,请花时间确保您的 将其设置为您正确的语法类型,而使用 general_ci 似乎对我很有用。最后,敲完头后清除缓存,将浏览器设置为正确的编码工具栏->查看->编码
在建立连接后将连接设置为 UTF8 可以解决问题。如果第一步已经成功,请不要这样做。
【讨论】:
【参考方案7】:始终获得正确编码的 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
编码保存您的文件。
【讨论】:
我正在回显表格中的信息。您也可以使用函数 utf8_encode()。它工作得很好。 php.net/manual/en/function.utf8-encode.php以上是关于从 mysql 表中读取 utf-8 内容的主要内容,如果未能解决你的问题,请参考以下文章