重音字符问题 (ADODB + MySQL + PHP)
Problem with accented characters (ADODB + MySQL + PHP)
我在开发无法放置重音字符的项目时遇到问题。
我正在使用 Adodb 5.20.14 版连接到 MySQL 数据库。
我有一个主配置文件,其中连接设置如下:
$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");
所有开发的文件都是UTF-8编码,如下图所示:
Image 02
注意: 我使用 VsCode.
所有 PHP 页面文件,将字符集元设置为 utf-8,如下图所示:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
我的数据库配置为utf8,如下图所示:
Image 04
表格配置为utf8字符集,如下图所示:
Image 5
列配置为utf8字符集,如下图所示:
Image 6
注意:我添加了“NOT NULL”规则来忽略没有字符集配置的表。
当执行查询以包含数据库中的信息时,我运行如下:
$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);
注意: 在文件的顶部,我包含了包含第一张图片中显示的信息的配置文件。
执行此操作后,数据库显示信息如下:
Image 8
查看网站信息时,出现如下:
Image 9
原文是这样的:
Image 10
我设法通过在查询中给出“执行”之前添加“setCharset”使其工作,如下图所示:
$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 中实现以下结果:
Image 12
我想了解我哪里出错了。我正在尝试使 utf8 “自动”,而不必在执行任何类型的查询之前调用“setCharset”。
感谢任何形式的帮助。 :)
注意:如果您需要有关该过程的更多信息以更好地理解问题,请告诉我。
我已经确定了问题的原因。
即使将数据库、表和列配置为 UTF-8 / utf8_general_ci 和 UTF-8 的 PHP 文件,仍然存在奇怪字符的问题。
问题出在格式化文本的标准 PHP 函数中,包括:
strtolower()
strtoupper()
ucfirst()
ucwords()
在重音文本(例如“acentuação”)中执行这些函数时,它们的 return 丢失了。
从我的整个项目中删除这些功能后,数据库中的奇怪字符问题不再发生(包括通过 PHP 和通过 MySQL Workbench 进行查询)。
我希望这可以帮助最终遇到与我相同问题的其他人。 :)
注意:我花了很长时间才回答,因为我只能在将这些更改放入生产环境后才能验证此信息。
我在开发无法放置重音字符的项目时遇到问题。
我正在使用 Adodb 5.20.14 版连接到 MySQL 数据库。
我有一个主配置文件,其中连接设置如下:
$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");
所有开发的文件都是UTF-8编码,如下图所示:
Image 02
注意: 我使用 VsCode.
所有 PHP 页面文件,将字符集元设置为 utf-8,如下图所示:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
我的数据库配置为utf8,如下图所示:
Image 04
表格配置为utf8字符集,如下图所示:
Image 5
列配置为utf8字符集,如下图所示:
Image 6
注意:我添加了“NOT NULL”规则来忽略没有字符集配置的表。
当执行查询以包含数据库中的信息时,我运行如下:
$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);
注意: 在文件的顶部,我包含了包含第一张图片中显示的信息的配置文件。
执行此操作后,数据库显示信息如下:
Image 8
查看网站信息时,出现如下:
Image 9
原文是这样的:
Image 10
我设法通过在查询中给出“执行”之前添加“setCharset”使其工作,如下图所示:
$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 中实现以下结果:
Image 12
我想了解我哪里出错了。我正在尝试使 utf8 “自动”,而不必在执行任何类型的查询之前调用“setCharset”。
感谢任何形式的帮助。 :)
注意:如果您需要有关该过程的更多信息以更好地理解问题,请告诉我。
我已经确定了问题的原因。
即使将数据库、表和列配置为 UTF-8 / utf8_general_ci 和 UTF-8 的 PHP 文件,仍然存在奇怪字符的问题。
问题出在格式化文本的标准 PHP 函数中,包括:
strtolower()
strtoupper()
ucfirst()
ucwords()
在重音文本(例如“acentuação”)中执行这些函数时,它们的 return 丢失了。 从我的整个项目中删除这些功能后,数据库中的奇怪字符问题不再发生(包括通过 PHP 和通过 MySQL Workbench 进行查询)。
我希望这可以帮助最终遇到与我相同问题的其他人。 :)
注意:我花了很长时间才回答,因为我只能在将这些更改放入生产环境后才能验证此信息。