【发布时间】:2010-09-29 04:09:56
【问题描述】:
我在使用 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:我正在使用 MySQL 版本 5.1.30 的 XAMPP for Linux。
编辑 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%'
输出一个空数组。
【问题讨论】: