Php 是什么导致Unicode显示为垃圾字符?
昨天我把我的网站移到了一个新的托管服务器上,我在Unicode文本方面遇到了问题 在旧主机包中,相同的脚本可以正常工作,在新主机中,Unicode显示如下: 在这两个主机中,这是我使用的测试代码:Php 是什么导致Unicode显示为垃圾字符?,php,html,mysql,Php,Html,Mysql,昨天我把我的网站移到了一个新的托管服务器上,我在Unicode文本方面遇到了问题 在旧主机包中,相同的脚本可以正常工作,在新主机中,Unicode显示如下: 在这两个主机中,这是我使用的测试代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http:/
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Untitled 1</title>
</head>
<body>
<?
$host = '';
$user = '';
$pass = '';
$db = '';
$con = mysql_connect($host , $user , $pass) or die ("Connection could not established." .mysql_error() );
mysql_select_db($db , $con) or die ("Colud not select database" . mysql_error());
$sql = "select * from news_line where status='enable' order by date DESC";
$res = mysql_query($sql);
while($dat=mysql_fetch_array($res)){
echo $dat['news'];
}
mysql_close($con);
?>
</body>
</html>
无标题1
在新主机中,什么可能导致这种行为?有一些事情可能会导致编码像这样中断。Unicode本身并不是一种字符编码,不过,我猜你说的是UTF-8编码(因为这是你在HTML头上尝试过的?) 因此,重要的是,您的整个代码管道都具有相同的字符集。如果情况不同,你可能会得到意想不到的结果,就像你现在这样。你需要考虑的一个基本概念是
- HTML标题
- PHP头文件
- MySQL连接
- 数据库/表
- 您的实际
文件.php
您已经设置了HTML标题,带有
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
在创建MySQL连接之后(典型情况是在MySQL\u select\u db()
之后)
对于数据库和表,您需要知道排序规则与字符集不同。但是,两者都应该是UTF-8,您可以通过在SQL中运行这些查询来设置它
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
最后,文件本身也可能需要UTF-8编码。如果您使用记事本++编写代码,可以在任务栏上的“格式”下拉列表中完成。您应该使用不带BOM的UTF-8(请参阅)
注:
任何已经存储在数据库中的数据都不一定具有此编码,因此,如果数据库中存在断字符,并且您完成了所有这些步骤,则可能需要使用正确的编码将内容重新上载到数据库(只需再次提交内容)。如果您有大量数据,可以使用多种方法分批执行此操作。虽然我自己从来没有用过它,但我听说人们成功地使用了它,但正如我所说,我自己从来没有用过
脚注: 您的代码使用的是非常过时的API,我强烈建议您研究MySQLi或PDO。如果这样做,请确保在处理变量的任何事情上使用准备好的语句
mysql.*
函数是不推荐使用的,因为PHP5.5(并且在PHP7中完全删除了),如果可以的话,您应该这样做。您应该选择另一个允许您使用的API(在处理变量时确实应该使用),如mysqli.*
或PDO
-看
你也可以看看
- HTML标题
- PHP头文件
- MySQL连接
- 数据库/表
- 您的实际
文件.php
- 有一些事情可能会导致编码像这样中断。Unicode本身并不是一种字符编码,不过,我猜你说的是UTF-8编码(因为这是你在HTML头上尝试过的?)
因此,重要的是,您的整个代码管道都具有相同的字符集。如果情况不同,你可能会得到意想不到的结果,就像你现在这样。你需要考虑的一个基本概念是
您已经设置了HTML标题,带有
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
在创建MySQL连接之后(典型情况是在MySQL\u select\u db()
之后)
对于数据库和表,您需要知道排序规则与字符集不同。但是,两者都应该是UTF-8,您可以通过在SQL中运行这些查询来设置它
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
最后,文件本身也可能需要UTF-8编码。如果您使用记事本++编写代码,可以在任务栏上的“格式”下拉列表中完成。您应该使用不带BOM的UTF-8(请参阅)
注:
任何已经存储在数据库中的数据都不一定具有此编码,因此,如果数据库中存在断字符,并且您完成了所有这些步骤,则可能需要使用正确的编码将内容重新上载到数据库(只需再次提交内容)。如果您有大量数据,可以使用多种方法分批执行此操作。虽然我自己从来没有用过它,但我听说人们成功地使用了它,但正如我所说,我自己从来没有用过
脚注: 您的代码使用的是非常过时的API,我强烈建议您研究MySQLi或PDO。如果这样做,请确保在处理变量的任何事情上使用准备好的语句
mysql.*
函数是不推荐使用的,因为PHP5.5(并且在PHP7中完全删除了),如果可以的话,您应该这样做。您应该选择另一个允许您使用的API(在处理变量时确实应该使用),如mysqli.*
或PDO
-看
你也可以看看