2014-06-20 19 views
0

我遇到了一些字符編碼/字符集問題PHP獲取▒而不是從mysql中刪除

我從表中檢索一些行,其中1個是varchar。無論何時在varchar列中有æ,ø或å,它們都會被轉換爲一個看似虛假的字符。爲每個3

同假字符我創建的表像這樣

CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`account_id` int(11) DEFAULT NULL, 
`name` varchar(100) DEFAULT NULL, 
`mytext` int(50) DEFAULT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=1402 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

我猜它有事情做與整理或字符集,但一直沒能找到任何東西解決了這個問題。

+1

確保你的HTML頁面有''設置 – Saqueib

回答

5

你必須設置(至少)3位字符集:

  1. 文件:

    <head> 
        <meta charset="utf-8"> 
    </head> 
    

    official w3c pages瞭解更多信息。

  2. 數據庫:

    ALTER DATABASE `my_database` CHARACTER SET utf8 COLLATE utf8_general_ci; 
    ALTER TABLE `my_table` CONVERT TO CHARACTER SET utf8; 
    ALTER TABLE `my_table` MODIFY `my_column` … CHARACTER SET utf8 COLLATE utf8_general_ci; 
    

    如果你不知道,看到difference between utf8_unicode_ci and utf8_general_ci

  3. 連接,使用PHP的PDO擴展與在DSN的字符集:

    $DBH = new PDO(
        'mysql:host=http://example.com;dbname=mydb;charset=utf8', 
        'username', 
        'password'); 
    
+1

+1在這裏,堅實的答案。 – Darren

+1

[在HTML中聲明字符編碼](http://www.w3.org/International/questions/qa-html-encoding-declarations) – Gumbo

+0

@Gumbo在回答中添加了您的源代碼,謝謝。 – arielnmz

0

從數據庫檢索記錄將其設置爲UTF8時,它將解決您的問題。使用下面的代碼希望它會幫助你

$con=mysqli_connect("localhost","username","password","db_name"); 
$con->set_charset("utf8"); 
$result = mysqli_query($con,"SELECT * FROM mytable"); 
+5

Plase唐不鼓勵使用'mysql'擴展名,提供帶'mysqli'擴展名或'PDO'的示例。 – arielnmz