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

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


我正在使用 5.20.14 版本的 Adodb 连接到 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编码,如下图所示:

图片02

注意:我使用 VsCode。

所有作为页面的 PHP 文件的字符集元设置为 utf-8,如下图所示:

<!DOCTYPE html>
<html lang="pt-br">
  <head>
    <meta charset="utf-8">


我的数据库配置为utf8,如下图所示:

图片04

这些表配置有 utf8 字符集,如下图所示:

图5

列配置为 utf8 字符集,如下图所示:

图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);

注意:在文件顶部,我包含配置文件,其中包含第一张图片中显示的信息。

执行该操作后,数据库显示信息如下:

图8

在网站上查看信息时,显示如下:

图9

原文是这样的:

图10



千巷猫影
浏览 57回答 1
1回答

杨魅力

我已经确定了问题的原因。即使将数据库、表和列配置为 UTF-8 / utf8_general_ci 并将 PHP 文件配置为 UTF-8,奇怪字符的问题仍然存在。问题出在格式化文本的标准 PHP 函数中,包括:strtolower()strtoupper()ucfirst()ucwords()当在带重音的文本中执行这些函数时(例如“acentuação”),它们的返回值会丢失。从我的整个项目中删除这些函数后,数据库中的奇怪字符问题不再发生(包括通过 PHP 和 MySQL Workbench 进行查询)。我希望这可以帮助其他最终遇到与我相同问题的人。:)注意:我花了很长时间才回答,因为我只能在将这些更改放入生产环境后才能验证此信息。
打开App,查看更多内容
随时随地看视频慕课网APP