重音字符问题(ADODB+;MySQL+;PHP)
我在开发一个无法放置重音字符的项目时遇到问题 我正在使用建立到MySQL数据库的连接,版本5.20.14中的Adodb。重音字符问题(ADODB+;MySQL+;PHP),php,mysql,utf-8,collation,adodb,Php,Mysql,Utf 8,Collation,Adodb,我在开发一个无法放置重音字符的项目时遇到问题 我正在使用建立到MySQL数据库的连接,版本5.20.14中的Adodb。 我有一个主配置文件,其中连接设置如下: $s_driver = "mysqli"; $o_db = adoNewConnection($s_driver); $o_db->connect($s_dbhost,$s_dbuser,$s_dbpasswd,$s_dbname); $o_db->SetFetchMode(ADODB_FETCH
我有一个主配置文件,其中连接设置如下:
$s_driver = "mysqli";
$o_db = adoNewConnection($s_driver);
$o_db->connect($s_dbhost,$s_dbuser,$s_dbpasswd,$s_dbname);
$o_db->SetFetchMode(ADODB_FETCH_ASSOC);
$o_db->setCharset("utf8");
$s_query_incluir = "INSERT INTO agtb_ordensdeservicos(id_agenda,
id_empresa,
hora_ini,
hora_fim,
observacoes,
tipo,
csa)
VALUES('".$a_post['add_id_os_dt_agenda']."',
'".ID_EMP_ATUAL."',
'".$a_post["add_os_hora_ini"]."',
'".$a_post['add_os_hora_fim']."',
'".$a_post['add_observacao']."',
'".$a_post['add_os_tipo']."',
'".$a_post['add_os_csa']."');";
$o_db->execute($s_query_incluir);
所有开发的文件都是UTF-8编码的,如下图所示:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
$s_query_incluir = "INSERT INTO agtb_ordensdeservicos(id_agenda,
id_empresa,
hora_ini,
hora_fim,
observacoes,
tipo,
csa)
VALUES('".$a_post['add_id_os_dt_agenda']."',
'".ID_EMP_ATUAL."',
'".$a_post["add_os_hora_ini"]."',
'".$a_post['add_os_hora_fim']."',
'".$a_post['add_observacao']."',
'".$a_post['add_os_tipo']."',
'".$a_post['add_os_csa']."');";
$o_db->setCharset("utf8");
$o_db->execute($s_query_incluir);
注意:我使用VsCode。所有作为页面的PHP文件都将字符集元设置为utf-8,如下图所示:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
$s_query_incluir = "INSERT INTO agtb_ordensdeservicos(id_agenda,
id_empresa,
hora_ini,
hora_fim,
observacoes,
tipo,
csa)
VALUES('".$a_post['add_id_os_dt_agenda']."',
'".ID_EMP_ATUAL."',
'".$a_post["add_os_hora_ini"]."',
'".$a_post['add_os_hora_fim']."',
'".$a_post['add_observacao']."',
'".$a_post['add_os_tipo']."',
'".$a_post['add_os_csa']."');";
$o_db->setCharset("utf8");
$o_db->execute($s_query_incluir);
注意:在文件的顶部,我包含了配置文件,其中包含第一幅图像中显示的信息。
执行此操作后,数据库显示以下信息:
$s_driver = "mysqli";
$o_db = adoNewConnection($s_driver);
$o_db->connect($s_dbhost,$s_dbuser,$s_dbpasswd,$s_dbname);
$o_db->SetFetchMode(ADODB_FETCH_ASSOC);
$o_db->setCharset("utf8");
$s_query_incluir = "INSERT INTO agtb_ordensdeservicos(id_agenda,
id_empresa,
hora_ini,
hora_fim,
observacoes,
tipo,
csa)
VALUES('".$a_post['add_id_os_dt_agenda']."',
'".ID_EMP_ATUAL."',
'".$a_post["add_os_hora_ini"]."',
'".$a_post['add_os_hora_fim']."',
'".$a_post['add_observacao']."',
'".$a_post['add_os_tipo']."',
'".$a_post['add_os_csa']."');";
$o_db->execute($s_query_incluir);
在网站上查看信息时,显示如下:
$s_driver = "mysqli";
$o_db = adoNewConnection($s_driver);
$o_db->connect($s_dbhost,$s_dbuser,$s_dbpasswd,$s_dbname);
$o_db->SetFetchMode(ADODB_FETCH_ASSOC);
$o_db->setCharset("utf8");
$s_query_incluir = "INSERT INTO agtb_ordensdeservicos(id_agenda,
id_empresa,
hora_ini,
hora_fim,
observacoes,
tipo,
csa)
VALUES('".$a_post['add_id_os_dt_agenda']."',
'".ID_EMP_ATUAL."',
'".$a_post["add_os_hora_ini"]."',
'".$a_post['add_os_hora_fim']."',
'".$a_post['add_observacao']."',
'".$a_post['add_os_tipo']."',
'".$a_post['add_os_csa']."');";
$o_db->execute($s_query_incluir);
原文如下:
我通过在查询中提供“execute”之前添加“setCharset”使其工作,如下图所示:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
$s_query_incluir = "INSERT INTO agtb_ordensdeservicos(id_agenda,
id_empresa,
hora_ini,
hora_fim,
observacoes,
tipo,
csa)
VALUES('".$a_post['add_id_os_dt_agenda']."',
'".ID_EMP_ATUAL."',
'".$a_post["add_os_hora_ini"]."',
'".$a_post['add_os_hora_fim']."',
'".$a_post['add_observacao']."',
'".$a_post['add_os_tipo']."',
'".$a_post['add_os_csa']."');";
$o_db->setCharset("utf8");
$o_db->execute($s_query_incluir);
在MySQL中实现以下结果:
我想知道我错在哪里。我试图使utf8“自动”,而不必在任何类型的查询执行之前调用“setCharset”。
我感谢任何帮助。:)
注意:如果您需要有关流程的更多信息以更好地了解问题,请告诉我。我已经确定了问题的原因 即使为UTF-8/utf8\u general\u ci和UTF-8中的PHP文件配置数据库、表和列,奇怪字符的问题仍然存在 问题出在格式化文本的标准PHP函数中,包括:
strtolower()
strtoupper()
ucfirst()
ucwords()
在重音文本中执行这些函数时(例如,“acentuação”),它们的返回丢失。
从我的整个项目中删除这些函数后,数据库中的奇怪字符问题就停止了(包括通过PHP和MySQL Workbench进行查询)
我希望这能帮助其他最终遇到与我相同问题的人。:)
注意:我花了很长时间才回答,因为我只有在将这些更改放入生产环境后才能验证此信息。请参阅中的“Mojibake”。然后执行建议的
SELECT HEX(col)…
以帮助确定文本在INSERT
期间或之后是否被篡改。我不记得有人使用adodb。它的优点是什么?setCharset
在封面下做什么?(这很关键。)很高兴你找到了。因此,您应该查看PHPmbstring
,您的SQL应该使用utf8mb4