Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重音字符问题(ADODB+;MySQL+;PHP)_Php_Mysql_Utf 8_Collation_Adodb - Fatal编程技术网

重音字符问题(ADODB+;MySQL+;PHP)

重音字符问题(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

我在开发一个无法放置重音字符的项目时遇到问题

我正在使用建立到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_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
在封面下做什么?(这很关键。)很高兴你找到了。因此,您应该查看PHP
mbstring
,您的SQL应该使用
utf8mb4