2010-05-30 30 views
-1

我正在通過一個小小的PHP腳本將數據從as3推送到MSQL!MYSQL突出顯示爲%E9

我的問題是,所有我強調的字符顯示爲怪異的iso字符。

例:E是顯示%E9

Obvisously我場的排序規則設置爲utf8_general_ci

即使當我試圖從沒有AS3一個簡單的PHP腳本插入數據,我得到的同樣的錯誤。

<?php 

mysql_connect("***", "***", "***") or die("Error :" .mysql_error()); 
mysql_select_db("***"); 


$query ="INSERT INTO test (message) values ('éèàïû')"; 

mysql_query($query) or die("Error updating DB"); 


?> 

任何想法,我在做什麼錯,我該如何解決這個問題?

在此先感謝。

jk_

回答

1

時間在這種情況下,問題可能在於一些地方:保證UTF8輸入兼容性,你必須在幾個地方檢查輸入:

  1. 如果你獲得從表單中的數據,請確保你的國家,你正在使用的字符集是由服務器規定(例如,通過AddCharset上Apache)或更好,用<meta http-equiv="Content-Type" content="text/html; charset=utf-8">的狀態表示NT。請注意,如果服務器聲明編碼爲latin1並且PHP將其設置爲utf8,則顯示可能是錯誤的。因此,強烈建議您使用內置標頭元標記。

  2. 在您的PHP配置中,嘗試使用行default_charset = "utf8"。這應該是默認的,但只是檢查。這將控制輸出字符集,如果這不符合Apache服務器或頁面字符集,則utf8可能會以ASCII形式輸出,從而導致您的問題。如果您無法訪問php.ini,請使用ini_set在共同包含的文件中設置此選項。

  3. 確保在連接到MySQL後執行mysql_set_charset('utf8');。這很重要,因爲它可以連接到MySQL到UTF8。如果你不這樣做,你的已經UTF8編碼的PHP字符串可能會再次被編碼到MySQL數據庫中。這導致了一個稱爲雙重編碼的問題。 編輯:儘管一些答案建議使用SET NAME,但不建議在PHP文檔中使用

  4. 請將您的數據庫,表格和列字符集都設爲utf8。我想你已經覆蓋了這個。

如果你這樣做,你的應用程序應該可以正常使用PHP函數,儘管各種庫可能會搞砸了。

+0

感謝您的回答!問題是我將數據從flash(as3)推送到服務器上的php文件。在同一個php文件中,如果我替換$ _GET ['Query']; (這是指從Flash中的字符串)由相同的字符串直接在PHP的作品!所以這是一個AS3和PHP之間的問題,而不是PHP和MySQL之間。 – 2010-05-30 07:01:31

+0

嗯,從我所瞭解的AS3中,可能會有一個'escape($ value);'語句在AS3的某個地方被調用。解決這個問題的一種方法就是在將任何輸入發送到數據庫之前,對來自Flash的任何輸入執行'urldecode($ value);'。 *編輯:*請注意,這可能會弄亂+符號,因爲urldecode將它們轉換爲空格。 – phsource 2010-05-30 16:26:28

0

mysql不會urlencode你的數據。一些你的代碼做到了。 可能在選擇時間。

除了這個問題,你應該發出一個SET NAMES <encoding>查詢每次連接到數據庫,其中<encoding>是你的HTML網頁的編碼

+0

謝謝!現在只有在使用php文件時纔有效。但是,當我從as3傳遞查詢時它不起作用。我必須弄清楚爲什麼。奇怪的。 – 2010-05-30 06:34:41

+0

@ JK-你會得到urlencoded數據。所以,先rawurldecode()。 – 2010-05-30 07:24:16