我有關於編碼PHP麻煩的編碼問題。PHP/MySQL與
我有一個JavaScript/HTML5 jQuery的頁面使用.post的$我的PHP腳本交互。 但是,PHP正面臨一個奇怪的問題,可能與編碼有關。
當我寫
htmlentities("í")
我希望PHP輸出í
。然而,而是輸出í
在開始的時候,我以爲我做一些錯誤與編碼,但是
htmlentities("í")=="í"?"Good":"Fail";
被outputing「失敗」,其中
htmlentities("í")=="í"?"Good":"Fail";
但htmlentities($search, null, "utf-8")
作品如預期。
我想有PHP與MySQL服務器進行通信,但是它有編碼的問題也一樣,即使我使用函數utf8_encode。我該怎麼辦?
編輯:在SQL命令,寫
SELECT id,uid,type,value FROM users,profile
WHERE uid=id AND type='name' AND value='XXX';
其中XXX不含í字符,按預期工作,但事實並非如此,如果有任何「I」字符。
SET NAMES 'utf8';
SET CHARACTER SET 'utf8';
SELECT id,uid,type,value FROM users,profile
WHERE uid=id AND type='name' AND value='XXX';
不僅失敗的字符,但它也沒有任何'特殊'字符的字符串失敗。 刪除SET NAMES和SET CHARACTER SET中的字符似乎沒有改變任何東西。
我連接到MySQL數據庫使用PDO。
編輯2:我使用的Linux XAMPP的MySQL版本5.1.30。
編輯3:從phpMyAdmin的運行SHOW VARIABLES LIKE '%character%'
輸出
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /opt/lampp/share/mysql/charsets/
從我的PHP腳本運行相同的查詢(用的print_r)輸出:
Array
(
[0] => Array
(
[Variable_name] => character_set_client
[0] => character_set_client
[Value] => latin1
[1] => latin1
)
[1] => Array
(
[Variable_name] => character_set_connection
[0] => character_set_connection
[Value] => latin1
[1] => latin1
)
[2] => Array
(
[Variable_name] => character_set_database
[0] => character_set_database
[Value] => latin1
[1] => latin1
)
[3] => Array
(
[Variable_name] => character_set_filesystem
[0] => character_set_filesystem
[Value] => binary
[1] => binary
)
[4] => Array
(
[Variable_name] => character_set_results
[0] => character_set_results
[Value] => latin1
[1] => latin1
)
[5] => Array
(
[Variable_name] => character_set_server
[0] => character_set_server
[Value] => latin1
[1] => latin1
)
[6] => Array
(
[Variable_name] => character_set_system
[0] => character_set_system
[Value] => utf8
[1] => utf8
)
[7] => Array
(
[Variable_name] => character_sets_dir
[0] => character_sets_dir
[Value] => /opt/lampp/share/mysql/charsets/
[1] => /opt/lampp/share/mysql/charsets/
)
)
運行
SET NAMES 'utf8';
SET CHARACTER SET 'utf8';
SHOW VARIABLES LIKE '%character%'
輸出空陣列。
PhpMyAdmin說我試圖得到的字段是使用utf8_bin編碼的,我認爲這就足夠了。不過,我會嘗試你的解決方案。 – luiscubal 2009-01-01 23:51:27
該字段使用UTF編碼,但您需要確保連接使用相同的編碼(出於某種原因,缺省值爲ISO-8859) – 2009-01-01 23:54:42