2013-09-23 92 views
1

爲什麼當我從數據庫中讀取西里爾文字是好的,但是當我把在選擇選項菜單這段文字我得到了奇怪的符號cyrillized話從數據庫和PHP讀取

http://prikachi.com/images/813/6589813g.jpg http://prikachi.com/images/811/6589811I.jpg

我想,我把到處是utf-8,但我不知道...

在我的HTML

我用:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
+0

檢查什麼樣的目標表中的字段,您存儲所有的字符串也有如下歸類:\t utf8_general_ci –

+0

這裏是由cherset造成的問題來無論是在數據庫中插入數據(應該是UTF-8 - 通用)和連接到數據庫時設置的字符集。 MySQLi,PDO和mysql_ *都有連接時設置默認字符集的功能 –

+0

另外,在執行任何查詢之前,請嘗試執行以下操作之一:SET NAMES utf8 –

回答

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" ...> 
    
+1

這看起來非常徹底 – allen213

+0

很多,我真的錯過了其中的一些 –

+0

mysqli :: set_charset('utf8')<<<不是先加載預設的字符集,然後一旦建立連接,它會加載utf8字符集?在那種情況下,這將是一個性能問題。那麼charset的根源是什麼?我在哪裏可以永遠改變它,而無需爲每個連接調整它? – henk