好吧,我得到了一个 php 脚本,它从 Steam web-api 获取昵称并将它们插入到 mysql 数据库中。他们中的许多人都有罕见的俄语和希腊语字符。我在 php.ini 和所有 php 文件中将 php 设置为 utf-8
mb_internal_encoding('utf-8');
我的 PDO 连接器配置为处理 utf8
$connection = new PDO('mysql:host=localhost;dbname=d2bd;mysql:charset=utf8mb4', 'root', '');
$connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$connection->setAttribute(PDO::ATTR_PERSISTENT, true);
$connection->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'");
我的 mysql 数据库正确配置了 utf8mb4
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8mb4
character_set_system utf8
character_sets_dir C:\xampp\mysql\share\charsets\
collation_connection utf8mb4_unicode_ci
collation_database utf8mb4_unicode_ci
collation_server utf8mb4_unicode_ci
completion_type NO_CHAIN
concurrent_insert AUTO
connect_timeout 10
core_file OFF
简而言之,我接受 web-api 的输入并使用 uft8_encode() 对其进行编码。然后我将它插入到数据库中。问题是某些字符没有很好地编码,当我从数据库中调用它们时,它们都被窃听了。
示例 1:
1.输入 -> Перуанский чертовски
2.编码 -> ÐеÑÑанÑкий ÑеÑÑовÑки
3.插入数据库
4.从数据库中选择 -> Ð?еÑ?Ñ?анÑкий Ñ?еÑ?Ñ?овÑкÐ
5.解码
6.输出 -> �?е�?�?анский �?е�?�?овск�</p>
示例 2:
1.输入 -> $ |/| 1 ↓_ € ♥ J
2.编码 -> $ |/| 1 â_ ⥠Ĵ
3.插入数据库
4.Select from DB -> 1 â??_ â?¬ â?¥ J
5.解码
6.输出 -> 1 ???_ ??? ??? J