Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是什么导致Unicode显示为垃圾字符?_Php_Html_Mysql - Fatal编程技术网

Php 是什么导致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:/

昨天我把我的网站移到了一个新的托管服务器上,我在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://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 -看


你也可以看看


    • 有一些事情可能会导致编码像这样中断。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 -看


      你也可以看看


      您使用的术语“Unicode”就像是字符编码一样。为什么要用代码段编写php代码?使用术语“Unicode”就像使用字符编码一样。为什么要用代码片段编写php代码?