2012-06-20 51 views
-5

可能重複:
UTF-8 all the way throughUTF-8與MySQL和PHP在freebsd瑞典字符(AAO)

您好我最近從Linux切換到freebsb我的服務器上,現在我的數據庫正在起作用。

當我嘗試回顯包含å,ä或ö(瑞典字母)的字符串時,它就成了一個問號。即:Söndag成爲S ndag。 echo「ä」;作品。 $ file --mime test.php test.php:text/plain;字符集= UTF-8

test.php的

<?php 
$a="å"; 
mysql_connect("localhost", "root", ":-)"); 
mysql_select_db("lidev"); 

$result=mysql_query("select * from DLG where dag='Onsdag'"); 
$row=mysql_fetch_array($result); 

echo $row['dagens']; 
echo "<br>"; 
echo mb_detect_encoding($row['dagens']); 
?> 

mb_detect_encoding()輸出 「UTF-8」 我的MySQL表是在utf8_general_ci

我完全卡住了!怎麼了?

乾杯!

+0

如果你寫的'回聲 「A」;'在一個PHP文件,它出來的'',那麼你就沒有**的文件保存爲UTF-8 **。是這樣嗎? – Esailija

+0

你需要把'header('Content-Type:text/html; charset = utf-8'); '在php文件,你在 –

+0

withHeader使用'echo'( 'Content-Type的', '應用/ JSON的;字符集= UTF-8') – ziaullahzia

回答

2

好像你沒有使用utf-8 無處不在因此你的數據在某個時刻被搞砸了。這取決於你在做什麼,你就必須更改/添加以下點中的一個或多個(最有可能它是SET CHARSET/mysql_set_charset你忘了):

  • 告訴MySQL使用UTF-8 。要做到這一點,把它添加到你的我的。CNF:

    collation_server = utf8_unicode_ci 
    character_set_server = utf8 
    
  • 與MySQL進行交互前,送出這兩querys:

    ​​3210

    ,或者讓打開連接後PHP這樣做:

    mysql_set_charset('utf8', $conn); // when using the mysql_-functions 
    mysqli::set_charset('utf8') // when using mysqli 
    
  • 集UTF-8作爲數據庫

    CREATE DATABASE `my_db` DEFAULT CHARACTER SET 'utf8'; 
    
  • 默認字符集爲表做同樣的:

    CREATE TABLE `my_table` (
        -- ... 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
    
  • 假設客戶端是一個瀏覽器,以utf-8和t的形式提供您的內容他正確的標題:

    header('Content-type: text/html; charset=utf-8'); 
    

    ,真正做到確保瀏覽器的理解,加元標記:

    <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
    
  • ,最後但並非最不重要的,告訴瀏覽器中使用,以提交表單的UTF-8

    <form accept-charset="utf-8" ...> 
    
+2

爲什麼在地獄後重復答案??? – dynamic

+1

當我開始寫這個時,沒有「close as duplicate」-vote,我不會刪除一個答案,因爲我稍後會認識它,因爲它可能仍然有幫助。事實上,你是對的:這個問題是重複的,這就是爲什麼我也投票關閉它。 – oezi