2015-10-06 43 views
2

我有一些問題,在我的網站的字符集。我無法獲得UTF-8字符集的工作,我得到了 而不是Å。是的,我在網上搜索答案四周,我已經用下面的代碼:字符集UTF-8和PHP header()函數不工作

<!DOCTYPE HTML> 
<head> 
    <?php header('Content-type: text/html; charset=utf-8'); ?> 
    <meta http-equiv="Content-Type" content="text/html" charset=utf-8" /> 
    <title><?php echo $db_title; ?></title> 
</head> 
<body> 
    Some content with letters æøå 
</body> 
</html> 

數據庫使用latin1_swedish_ci

任何想法可能是什麼呢?

回答

1
  • 任何輸出到瀏覽器(如由JJ坎蒂隆指出)

  • 雖然PHP和HTML使用正確的UTF-8,值得注意的是,MySQL使用之前設置PHP header標籤減少版本的UTF-8,所以當選擇數據庫表/字段的排序時,「utf8_general_ci」(以及類似的)是而不是完整的字符集,所以你想要顯示的角色將不會正確存儲。

你需要做的是確保MySQL使用完整的UTF-8字符選擇

整理= 'utf8mb4'

此外,當您連接設置您的腳本,你需要指定相同(utf8mb4)字符集爲PHP/MySQL的通信數據庫 - 所以設置類似的信息(在儘可能的MySQLi或PDO等)

new PDO('mysql:host=localhost;charset=utf8mb4') 

或MySQLi的閱讀了關於http://php.net/manual/en/mysqli.set-charset.php

如果在SQL數據存儲爲utf8mb4但只使用標準的MySQL-UTF8(3字節而不是4字節),則字符集將在運輸被搞砸了傳輸數據。

閱讀:https://stackoverflow.com/a/16893103/3536236

+0

很高興知道,我還沒有創建插入系統,但這將明確地讓我領先於未來的問題:) – PhyCoMath

1

你需要你輸出任何HTML之前設置的頭。

試試你的第一個HTML標記之前設置頁眉。 EG:

<?php header('Content-type: text/html; charset=utf-8'); ?> 
<!DOCTYPE HTML> 
<head> 
    <meta http-equiv="Content-Type" content="text/html" charset=utf-8" /> 
    <title><?php echo $db_title; ?></title> 
</head> 
<body> 
    Some content with letters æøå 
</body> 
</html> 
+0

我在數據庫連接更改字符集解決了這個問題。必須有主機更新,因爲它之前沒有影響過網站。 – PhyCoMath

+1

啊,這是有道理的。很高興聽到你解決了它。 –

0

經過大量的搜索中我碰到下面question.進來的數據庫連接,我不得不指定我想要的UTF-8字符集。我做了以下方式:

$db = new PDO('mysql:host=localhost;dbname=NAME;charset=utf8', 'USERNAME', 'PASSWORD'); 

一定是從造成問題,因爲我以前沒有現在受到該問題影響主機的服務器更新。

+1

你真正想要'utf8mb4'而不是在MySQL標準UTF8。 – Martin