2013-05-20 120 views
2

我正在試着製作一個顯示日文字符的頁面。這些日文字符存儲在我的數據庫中。我已經完成了我的研究並嘗試了很多建議,但是我的日語角色仍然作爲問號返回。目前,這是我的代碼的外觀:在PHP頁面上顯示來自MySql數據庫的日文字符

<?php 


$con=mysqli_connect("host", "user", "pw", "db"); 
if (!$con) 
{ 
    die('Failed to connect to mySQL: ' .mysqli_connect_errno()); 
} 
} 
?> 

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 

<body> 
<?php 
    mb_internal_encoding('UTF-8'); ?> 
    <center> 
     <div id="fb-root"></div> 
     <form method="POST" id="myForm"> 
      <h1> 
       <?php 
       $title = mysqli_query($con, "SELECT `title` FROM titles WHERE c1='a' or c2 ='b'") or die("ERROR: ". mysqli_error($con)); 
       $title_str = mysqli_fetch_array($title); 

       $mystr = mb_convert_encoding($title_str[0], "UTF-8"); 
       echo "test: ".$mystr; 
         ?> 
     </h1><br/> 
    </form> 
</body> 

如果我的字符編碼的作品,如果我更換$ title_str [0]日本串它的工作我已經檢查。我在這裏錯過了什麼嗎?我不知道爲什麼編碼在字符串手動輸入,但不是我從數據庫中獲得的字符串。

+0

你確定數據庫中字符串的字段能夠保存UTF8嗎? – AStupidNoob

+0

是的。我的數據庫中的所有字符串都是日語字符 – user1597438

+0

'如果未指定from_encoding,則將使用mb_convert_encoding上PHP.org的內部編碼。我想這可能是你想要的,但請嘗試完全按照在數據庫中指定它(選擇其中的一個並在mb_convert_encoding http://www.php.net/manual/en/mbstring.supported的最終可選參數中查找它-encodings.php)。我猜測是從mb_convert_encoding無法將輸入分辨率轉換爲UTF-8 – AStupidNoob

回答

1

嘗試使用SET NAMES UTF8連接到MySQL後:

$con=mysqli_connect("host", "user", "pw", "db"); 
if (!$con) 
{ 
    die('Failed to connect to mySQL: ' .mysqli_connect_errno()); 
} 

mysqli_query($con, "SET NAMES 'UTF8'") or die("ERROR: ". mysqli_error($con)); 

正如manual說:

SET NAMES表示的字符集客戶端將用來發送SQL 語句到服務器...它還指定服務器應該使用 將字符集發送回客戶端的字符集。

之後,沒有必要使用mb_convert_encoding

+0

真棒。這很好。我確實改變了你的答案。我爲UTF8添加了單引號,並將其大寫,因爲如果沒有單引號或小寫字母,它就不起作用。非常感謝。 – user1597438

+0

@ user1597438太好了。編輯已批准。 – user4035

相關問題