2016-02-26 151 views
0

我在解決我的sql腳本中的UTF8字符時出現問題。PHP - UTF8解碼問題

可以說我有兩個角色從mysql來:

「A」 & ❤️

與我的腳本á解碼精然而,表情符號進行解碼,在â¤ï

我在做什麼錯誤?

$conn = new mysqli($servername, $username, $password, $dbname); 
$sql="SELECT * FROM `community` ORDER BY `community`.`date` DESC LIMIT 25"; 

mysqli_set_charset($conn, "utf8"); //UTF8 

$result = $conn->query($sql); 

while($row = $result->fetch_assoc()) { 

    $comment = $row['comment']; 

    echo $comment . "</br>"; 

    //echo htmlentities($comment); not working... white screen 


} 

UPDATE

我已經改變了數據庫和表

$conn = new mysqli($servername, $username, $password, $dbname); 
$sql="SELECT * FROM `community` ORDER BY `community`.`date` DESC LIMIT 25"; 

mysqli_set_charset($conn, "utf8"); //UTF8 

$result = $conn->query($sql); 

while($row = $result->fetch_assoc()) { 

    $comment = $row['comment']; 
    $comment = mb_convert_encoding($comment, "UTF-8"); 

    echo $comment . "</br>"; 

    //echo htmlentities($comment); not working... white screen 


} 
+0

另見http://stackoverflow.com/q/279170/476 – deceze

回答

0

您的問題這裏可能是與數據庫。 您需要將數據庫字符集,以便正確地查詢其設置爲UTF-8,你在做什麼是得到一個字符串和設置使用

mysqli_set_charset($conn, "utf8"); //UTF8 

這還不夠客戶端默認字符集,所以我會建議您運行SQL查詢,如

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

爲了更新它。如果你需要的是改變單一的表使用

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

最後,你可以使用檢查

SELECT DEFAULT_COLLATION_NAME FROM data_dictionary.SCHEMAS WHERE  SCHEMA_NAME = 'databasename' LIMIT 1; 

作爲一個額外的預約,以防萬一在PHP中您可以使用轉換字符串編碼

$comment = mb_convert_encoding($comment, "UTF-8"); //Change encoding 
echo mb_detect_encoding($str, "auto"); // Check encoding 

當然,您應該在進行任何這些更改之前進行備份以防萬一。

編輯:正確的順序運行這些查詢,方法是:使用第二查詢

  • 檢查是否使用

    1. 來看,它在整個DB第一查詢
    2. 來看,這臺由表字符集已被正確設置使用第三個查詢

    編輯2:請記住在您的html文件中設置標記<meta charset="UTF-8">

    我希望這可以幫助您:)

  • +0

    謝謝。我試圖將'搭配'更改爲'utf8_unicode_ci',但仍然有相同的問題 – SNos

    +0

    @SNos,這是因爲您需要首先在數據庫然後在每個表中更改它。我會編輯答案 – Asur

    +0

    我試過改變你的建議,我仍然看不到表情符號。在數據庫中,它們的存儲方式如下:'â¤ï',而不是由php轉換 – SNos