+ -
当前位置:首页 → 问答吧 → php 中文乱码问题,请给小弟一点意见

php 中文乱码问题,请给小弟一点意见

时间:2013-05-23

来源:互联网

小弟第一次搅呢d野,中文出 "???"
上网睇过好多呢个问题既教学都解决唔到。
请问我有咩做漏左。


情况系: 用php 由mysql内既拉出黎既中文record会变做 "???"
用sql call 既就正常出中文,
php script内, 非mysql既资料,中文正常显示。


[tr=rgb(223,][/tr]
character set client utf8
character set connection utf8
character set database utf8
character set filesystem binary
character set results utf8
character set server utf8
character set system utf8
character sets dir /usr/syno/mysql/share/mysql/charsets/
collation connection utf8_unicode_ci
(Session value) utf8_general_ci
collation database utf8_unicode_ci
collation server utf8_unicode_ci




database 内,我见到既setting 都已改做 UTF-8
[tr=rgb(223,][/tr]
character set client utf8
character set connection utf8
character set database utf8
character set filesystem binary
character set results utf8
character set server utf8
character set system utf8
character sets dir /usr/syno/mysql/share/mysql/charsets/
collation connection utf8_unicode_ci
(Session value) utf8_general_ci
collation database utf8_unicode_ci
collation server utf8_unicode_ci




php script 内已加

<head>
<meta HTTP-EQUIV="Content-Type" C></head>

Script 内跟网上教学加呢两句
mysql_query("SET NAMES 'UTF8'");mb_internal_encoding ('utf-8');

都无分别。


script 如下---------------------------------    echo "颜-色:   ";
  echo $row['Color'];
--------------------------------

page display 如下
---------------------------------
Batch: 1320248
颜色: ???
---------------------------------



请问我系咪仲有野做漏呢?

[ 本帖最后由 oprso 於 2013-5-23 10:46 AM 编辑 ]

作者: oprso   发布时间: 2013-05-23

档案编写另存时是否已设定为 UTF-8

有任何需要可以PM我
希望帮到你.

作者: DevMark   发布时间: 2013-05-23

引用:
原帖由 oprso 於 2013-5-23 10:45 AM 发表
小弟第一次搅呢d野,中文出 "???"
上网睇过好多呢个问题既教学都解决唔到。
请问我有咩做漏左。


情况系: 用php 由mysql内既拉出黎既中文record会变做 "???"
用sql call 既就正常出中文,
php script内,  ...
可参考 https://code.google.com/p/myquicknet/source/browse/src/html/testing/advance_example.html 中的 meta tag 、 https://code.google.com/p/myquicknet/source/browse/src/php_class/com/googlecode/myquicknet/database/MQNDatabaseMySQLi.php 中的 connect() method ,及 https://code.google.com/p/myquicknet/source/browse/src/config.php
中的 default encoding settings 。

另外 MySQL 中,建议用 utf8_bin 。因为 *_ci 中的 ci 代表 case insensitive 。

作者: xianrenb   发布时间: 2013-05-23

引用:
原帖由 DevMark 於 2013-5-23 12:07 发表
档案编写另存时是否已设定为 UTF-8

有任何需要可以PM我
希望帮到你.
谢谢
写php时同notepad 写的,已经系用utf-8 黎save。都系唔得。

[ 本帖最后由 oprso 於 2013-5-23 01:22 PM 编辑 ]

作者: oprso   发布时间: 2013-05-23

引用:
原帖由 xianrenb 於 2013-5-23 13:15 发表


可参考 https://code.google.com/p/myquicknet/source/browse/src/html/testing/advance_example.html 中的 meta tag 、https://code.google.com/p/myquicknet/source/browse/src/php_class/com/googlecode/myquicknet/database/MQNDatabaseMySQLi.php 中的 connect() method ,及 https://code.google.com/p/myquicknet/source/browse/src/config.php
中的 default encoding settings 。

另外 MySQL 中,建议用 utf8_bin 。因为 *_ci 中的 ci 代表 case insensitive 。
谢谢。我再睇睇。

作者: oprso   发布时间: 2013-05-23

或者将你代码放上来.谢谢

希望帮到你

作者: DevMark   发布时间: 2013-05-23

引用:
原帖由 DevMark 於 2013-5-23 14:34 发表
或者将你代码放上来.谢谢

希望帮到你
好的。感激

我对php 咩都唔识,试完又试先整到条script有反应,call到data出黎。

条script中间好多垃圾 // 左,全部都试过,行同唔行,试下可唔可以整番中文出黎。但都系唔得。个mysql server, webserver都系系一个synology NAS到行。我亦试过叫我老友将个database搬左去佢个webhost,全部野由佢个边行,出黎既output都系同样出 "???"

<head><meta HTTP-EQUIV="Content-Type" C></head>
<?php

$username = "hfhf";
$password = "";$
hostname = "192.168.0.11";
$DB = "HF";
$Wnumber = $_GET['Wnum'];
//echo "$Wnumber ";//Connect to the database$con=mysqli_connect($hostname, $username, $password, $DB);
//mysql_select_db($DB, $con);


//Set database to Big5//mysql_query("SET NAMES 'utf8'",$con);

mysql_query("SET NAMES 'UTF8'");mb_internal_encoding ('utf-8');

//mysql_query ($con, "SET CHARACTER SET 'utf-8'");

//mysql_query ($con, "SET NAMES 'utf-8'");

// Check connectionif (mysqli_connect_errno())  {  echo "Failed to connect to MySQL: " . mysqli_connect_error();

  }echo "Connected to MySQL: <br>";

echo "$DB<br><br>";

$result = mysqli_query($con,"SELECT * FROM Card WHERE Wnumber='$Wnumber'");

while($row = mysqli_fetch_array($result))  {  echo $row['Batch']." <br>  " . $row ['Cnumber']."<br>". $row['Customer'];

   echo "<br>";  echo "<br>";  echo "Color Number:   ";  echo $row['ColorNumber'];  echo "<br>";  echo "Batch:   ";  echo $row['Batch'];  echo "<br>";  echo "颜色:   ";  echo $row['Color'];  echo "<br>";  }?>.
---------------------------------------

以下系行呢条script出黎既output

---------------------------------------

Connected to MySQL:
HF

12C0827

????

Color Number: 613
Batch: 12C0827
颜色: ??

---------------------------------------

[ 本帖最后由 oprso 於 2013-5-23 02:57 PM 编辑 ]

作者: oprso   发布时间: 2013-05-23

点解会无晒d line break~~~~~

作者: oprso   发布时间: 2013-05-23

ok this should be easier.

作者: oprso   发布时间: 2013-05-23

<?phpdefine('SERVER', 'localhost');define('USERNAME', '');define('PASSWORD', '');define('DATABASE', '');$connection = @mysql_connect(SERVER, USERNAME, PASSWORD) or die('Connection error -> ' . mysql_error());mysql_select_db(DATABASE, $connection) or die('Database error -> ' . mysql_error());                $result = mysql_query("SELECT * FROM Card WHERE Wnumber='".$_GET['Wnum']."'");while ($rows = mysql_fetch_array($result, MYSQL_ASSOC)) {echo $rows['Batch']." <br>  " . $row ['Cnumber']." <br> ". $rows['Customer'];echo "<br>";echo "<br>";echo "Color Number:    ".$rows['ColorNumber'];echo "<br>";echo "Batch:   ".$rows['Batch']; echo "<br>";  echo "颜色:   ".$rows['Color']; echo "<br>"; }    ?>

[ 本帖最后由 DevMark 於 2013-5-24 12:17 PM 编辑 ]

作者: DevMark   发布时间: 2013-05-23

因若MYSQL 设定好, 印出该没有问题.
若有问题再加
mysql_query("SET NAMES 'UTF8'");
mysql_query("SET CHARACTER SET UTF8");
mysql_query("SET CHARACTER_SET_RESULTS=UTF8'");

作者: DevMark   发布时间: 2013-05-23

引用:
原帖由 oprso 於 2013-5-23 02:59 PM 发表
ok this should be easier.
2506686
看来是因为你混合了 mysql_*() 及 mysqli_*() 两种 API 。
http://www.php.net/manual/en/mysqlinfo.api.choosing.php

新应用应全数采用 mysqli。

作者: xianrenb   发布时间: 2013-05-23

引用:
原帖由 DevMark 於 2013-5-23 16:11 发表
因若MYSQL 设定好, 印出该没有问题.
若有问题再加
mysql_query("SET NAMES 'UTF8'");
mysql_query("SET CHARACTER SET UTF8");
mysql_query("SET CHARACTER_SET_RESULTS=UTF8'");
Thanks.  I try it when I back home.



作者: oprso   发布时间: 2013-05-23

引用:
原帖由 xianrenb 於 2013-5-23 17:27 发表


看来是因为你混合了 mysql_*() 及 mysqli_*() 两种 API 。
http://www.php.net/manual/en/mysqlinfo.api.choosing.php

新应用应全数采用 mysqli。
我都有留意到呢个问题。
我系网上左抄右抄得黎的,最后佢行到我又唔知佢有咩分别,行到就无理佢。请问我应该用边句先岩呢?



作者: oprso   发布时间: 2013-05-23

引用:
原帖由 oprso 於 2013-5-23 06:18 PM 发表

我都有留意到呢个问题。
我系网上左抄右抄得黎的,最后佢行到我又唔知佢有咩分别,行到就无理佢。请问我应该用边句先岩呢?



全数采用 mysqli 就 ok 。
写程式一定要理解所写的功能是什么才可。
不然有 bug 就永远不知道错什么。
努力的花点时间看 php.net 的资料吧!

作者: xianrenb   发布时间: 2013-05-24

引用:
原帖由 xianrenb 於 2013-5-24 09:17 发表

全数采用 mysqli 就 ok 。
写程式一定要理解所写的功能是什么才可。
不然有 bug 就永远不知道错什么。
努力的花点时间看 php.net 的资料吧!
感激。我会试试。

作者: oprso   发布时间: 2013-05-24

引用:
原帖由 DevMark 於 2013-5-23 16:11 发表
因若MYSQL 设定好, 印出该没有问题.
若有问题再加
mysql_query("SET NAMES 'UTF8'");
mysql_query("SET CHARACTER SET UTF8");
mysql_query("SET CHARACTER_SET_RESULTS=UTF8'");
得左啦!!! 感激!但你上一个post,辘个result个阵无野睇。唔知点解。
咁到底我个问题发生左系边呢?

呢条script 出到中文

作者: oprso   发布时间: 2013-05-24

抱歉,因草率做出来,没有完善检查

故请将row 全部改为rows


希望帮到你

作者: DevMark   发布时间: 2013-05-24

引用:
原帖由 DevMark 於 2013-5-24 12:16 发表
抱歉,因草率做出来,没有完善检查

故请将row 全部改为rows


希望帮到你
得左啦! 唔该晒!!

作者: oprso   发布时间: 2013-05-24