gpt4 book ai didi

php - PHP + Mysql(UTF-8)某些字符仍然存在错误

转载 作者:行者123 更新时间:2023-12-01 07:37:43 25 4
gpt4 key购买 nike

好吧,我得到了一个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.从DB中选择->Ð?еÑ?Ñ?ан½ÑкийÑ?еÑ?Ñ??¾¾

5,解码

6.输出->``?е?''?анский``?е??

示例2:

1.输入-> $ | / | 1↓_€♥J

2.编码-> $ | / | 1â€â¥J

3,插入数据库

4.从DB中选择-> 1â€â€¥J

5,解码

6.输出-> 1 ???? _ ???

最佳答案

字符/字符集/归类问题清单

包括mysqlmysqliPDO
内容

  • 免责声明
  • 我的数据库中的插入文件无法正常工作!我能做什么?
  • 更改数据库或表的字符集和排序规则
  • 设置您的Skript文件的编码
  • 使用php或元标记
  • 设置页面的字符集
  • UTF8和UTF8mb4有什么区别?
  • 对此特定问题的答案
  • 更多信息/附加链接
  • 旁注


  • 1.免责声明

    这个答案不仅应该回答这个问题,而且应该更广泛一些,以便更多的人更快地找到捆绑的好答案!

    !重要提示!
    如果您更改数据库中的某些内容,请务必备份数据库!检查两次或3次!

    我愿意接受改进和评论,例如错误更正。
    另外,如果语法不完美,我深表歉意:D

    如果您遇到这样的问题:
  • Php + Mysql(UTF-8,utf8mb4)某些字符仍然存在错误
  • 如何将整个MySQL数据库字符集和排序规则转换为UTF-8?
  • 尝试将UTF-8插入MySQL
  • 时出现“不正确的字符串值”
  • 在my.cnf中将MySQL默认字符集更改为UTF-8吗?
  • 将utf8mb4与php和mysql一起使用
  • PDO + MySQL和损坏的UTF-8编码
  • 在php Mysql中插入数据时出错
  • PHP PDO:字符集,是否设置了名称?
  • 在MySQL中使用
  • 设置名称utf8?
  • PHP mysql charset utf8问题
  • UTF-8贯穿
  • 使用PHP
  • 从MySQL处理utf8mb4数据
  • 错误1115(42000):mysql
  • 中未知字符集:'utf8mb4'

    ...那么我的回答也许会对您有所帮助!

    2.我的数据库中的插入文件无法正常工作!我能做什么?

    如果您的插入文件无法正常工作,则您在数据库中插入的数据看起来像这样,这可能有多种原因!

    例子:
    ??????????
    𫗮𫗮𫗮𫗮
    �??_ �?�
    â_ ⬠⥠J

    这是一个小清单,您可以进行检查,检查是否一切正常!
    (在清单之后,还有一些有关 mysqlmysqliPDO的其他信息)

    清单:
  • 确保在表,客户端,服务器和文本字段上设置了默认字符集
  • 如果看不到第3点
  • 确保您的数据库连接字符集
  • 如果看不到mysql / PDO
  • 确保您的显示数据已设置文档的字符集!
  • 如果看不到第5点
  • 确保您的skript文件使用正确的字符集保存!
  • 如果看不到第4点
  • 确保您设置了角色和字符集!
  • 如果看不到mysql / PDO
  • 确保您的表格接受utf8!
  • 如果看不到第5点
  • 确保已设置连接编码
  • 如果看不到mysql / pdo
  • 确保已正确设置服务器字符编码
  • 如果看不到mysql / pdo
  • ...
  • 您必须确保在任何地方都使用utf8 / utf8mb4!


  • mysql:

    - mysql_query("SET NAMES 'utf8'");在使用每个查询之前运行SET NAMES。因为如果mysql驱动程序没有提供charset机制,那么您必须使用SET NAMES!
    - mysql_query("SET CHARACTER SET utf8 ");将字符设置为utf8
    - mysql_set_charset('utf8');将您的字符集设置为utf8
    -mysql API驱动程序不支持utf8mb4(错误1115(42000))
    - character_set_server=utf8设置服务器字符

    PDO:

    - $dbh->exec("set names utf8");如果您使用的是PDO,则可以使用此行设置名称
    - $dbh = new PDO("mysql:host=$host;dbname=$db;charset=utf8");此行设置了字符集,但您必须具有PHP 5.3.6或更高版本
    - $dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' ");您也可以在此行设置SET NAMES
    - mb_internal_encoding('UTF-8');在使用PDO时设置编码

    3.更改数据库或表的字符集和排序规则

    如果必须更改数据库或表的字符集或排序规则,则可以使用以下代码行:
    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

    4.设置skript文件的编码

    您可能需要检查您的skript(php)文件是否使用正确的字符集保存!

    为此,我建议您 Notpad++!

    如果您已在notpad中打开文件,请转到菜单点“编码”并更改字符集

    5.使用php或meta标签设置页面的字符集

    为了在utf8 / utf8mb4中显示数据,必须确保您的站点设置了正确的字符集!

    您可以通过以下三种方式设置字符集:
    //PHP
    ini_set("default_charset", "UTF-8");
    header('Content-type: text/html; charset=UTF-8');

    //HTML
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    还可以在您的表单中接受utf8:
    <form accept-charset="UTF-8">

    6. UTF8和UTF8mb4有什么区别?

    UTF8:
    -utf8仅支持3个字节的符号
    -...(还有很多)

    UTF8MB4:
    -utf8mb3确实支持4字节的符号
    -...(还有很多)

    7.回答这个具体问题

    我认为这应该工作,因为您使用了 PDO:
    (在创建PDO对象之后!如果您使用的PHP版本低于5.3.6)
    $dbh->exec("set names utf8");

    否则,请尝试以下方法之一:
    ini_set("default_charset", "UTF-8");
    header('Content-type: text/html; charset=UTF-8');

    更新:

    要更改 collationcharsetdatabasetable,请使用以下命令:
    ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

    8.更多信息/其他链接
  • default character set
  • character set
  • mysql_set_charset
  • error_reporting
  • pdo
  • mysql
  • mysqli


  • 9.附注

    9.1错误报告
    如果未显示错误,请使用以下代码段:
    <?php
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    ?>

    9.2 Unicode
    这样您就不会犯任何错误,您必须真正了解utf8!

    9.3一个单词表示mysql,mysqli和PDO
    我的个人排名是:
  • PDO
  • mysqli
  • mysql

  • 我建议您使用PDO或mysqli,因为它对mysql有很多好处!

    关于php - PHP + Mysql(UTF-8)某些字符仍然存在错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26809320/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com