2016-01-23 26 views
0

我在數據庫中有一些文本。我使用法語和英語。法語有口音和一些特殊字符,如ç。我使用Mamp,MySQL和PHP。存儲和輸出帶有重音的文本

我有排序規則latin1_swedish-ci(默認值)。我試過utf8_general_ci,結果是一樣的。 如果我在一個html頁面中使用,我有這個頭:<meta charset="UTF-8">

作爲一個例子,在數據庫中我有「voilà」。

當我回聲從數據庫中的HTML文本:

$con = mysqli_connect("localhost","root","root"); 
if (!$con) { 
    die('The connexion failed: ' . mysqli_error()); 
} 

if (!mysqli_select_db($con, 'prova')){ 
    echo "Connection with database was not possible"; 
} 


$result = mysqli_query($con, "SELECT * FROM test1 
           WHERE id='1' ") 
or die(mysqli_error()); 
while($row = mysqli_fetch_array($result)) { 

    $text = $row['first']; 
    echo $text; //I see: voil� 
    echo htmlentities($text); //I see nothing 
    echo utf8_encode($text); //This works: I see voilà 
} 
  1. 爲什麼htmlentities不起作用?
  2. utf8_encode();要走的路嗎?當我輸出數據庫中的東西時,我必須使用它?如果排序規則已經是UTF8,爲什麼我必須使用它?有沒有更好的方法來存儲和輸出帶有重音的文本到MySQL數據庫中?
+0

[獲取特殊字符的可能的複製用PHP創建MySQL數據庫](http://stackoverflow.com/questions/15892610/getting-special-characters-out-of-a-mysql-database-with-php) – ItsGreg

+0

@ItsGreg。另一個並不影響我的問題。我到了類似的解決方案,但問題是爲什麼 – Nrc

+0

'htmlentities()'應該不會返回任何東西,如果你的字符串是'voilà'。這個字段在phpMyAdmin中是什麼樣的? – rybo111

回答

0

後您連接到數據庫,你應該在客戶端字符集設置爲UTF-8:

mysqli_set_charset($con, "UTF8"); 

否則,MySQL客戶端轉換的UTF8「瞧」和latin1(「原因似乎是它的默認值) 。

要麼你告訴我想在UTF8的一切客戶,或使用默認的latin1得到它,並將其轉換爲一個接一個自己調用utf8_encose($文本)

相關問題