2012-01-28 60 views
1

我有一個PHP文件,它在我的數據庫中插入$ mail和$ password。見下面的代碼。我的php文件,我的BD和我的表字段都是utf-8。所以我不明白的是,爲什麼我發送的郵件「Philémon」在我的桌面上顯示爲「Philémon」。順便說一下,我知道這不是一種郵件格式。這只是爲了測試。將數據插入到mysql時出現PHP charset問題

我的PHP:

<?php 
header('Content-Type: text/html; charset=utf-8'); 
require("php/connect.inc.php"); 

$mail = mysql_real_escape_string("Philémon"); 
$password = sha1("pass123"); 

mysql_query("INSERT INTO ENS_MEMBRES (ENS_MAIL, ENS_PASS) VALUES ('$mail','$password')"); 
?> 
+0

'mail()'使用的編碼是什麼? – yoda 2012-01-28 18:24:44

+0

您的數據庫連接可能不使用UTF-8?不是表格本身,而是與數據庫的連接。 – 2012-01-28 18:26:20

回答

5

你的PHP源代碼可能是UTF-8編碼;你的數據庫連接可能是ISO-8859-1編碼的,它是mySQL的默認連接編碼。這將導致UTF-8 é被解釋爲兩個獨立的字節,並以這種方式存儲在mySQL表中。

解決方案:在發送數據之前執行一個

mysql_set_charset('utf8'); 

;如果該功能不可用,請使用

mysql_query("SET NAMES utf8;"); 
+0

Hello Pekka.mysql_set_charset('utf8')解決了這個問題。你搖滾!我把頭('Content-Type:text/html; charset = utf-8');爲什麼這是不夠的? – Marc 2012-01-28 18:27:56

+0

@用戶號碼該頭文件只是告訴*瀏覽器*如何解釋即將到來的輸出;它對其他任何東西都沒有影響 – 2012-01-28 18:28:50

+0

所以標題(blalbla)只對頁面上顯示的內容產生影響?正確? – Marc 2012-01-28 18:30:49