エンコーディングに関してPHPで問題が発生しています。
$.post を使用して PHP スクリプトと対話する JavaScript/jQuery HTML5 ページがあります。しかし、PHP はおそらくエンコーディングに関連した奇妙な問題に直面しています。
私が書くとき
htmlentities("í")
PHPが出力することを期待していますí
。ただし、代わりに出力されますí
最初は、エンコーディングを間違えていると思いましたが、
htmlentities("í")=="í"?"Good":"Fail";
「失敗」を出力しています。
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 には í 文字が含まれていませんが、期待どおりに動作しますが、「í」文字がある場合は機能しません。
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 から ' 文字を削除しても、何も変わらないようです。
PDO を使用して MySQL データベースに接続しています。
編集 2: Linux 用の XAMPP の MySQL バージョン 5.1.30 を使用しています。
編集 3: SHOW VARIABLES LIKE '%character%'
PhpMyAdmin 出力からの実行
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%'
空の配列を出力します。