以前曾经问过这个问题,但是其他海报的关注更多地与文档的原始编码有关。
我有一个包含一些中文文本的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>";
这显示?????再次。有线索吗?
感谢。
答案 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'炒猪肉与蔬菜'