我在開發一個無法放置重音字符的項目時遇到問題。我正在使用 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
1 回答

楊魅力
TA貢獻1811條經驗 獲得超6個贊
我已經確定了問題的原因。
即使將數據庫、表和列配置為 UTF-8 / utf8_general_ci 并將 PHP 文件配置為 UTF-8,奇怪字符的問題仍然存在。
問題出在格式化文本的標準 PHP 函數中,包括:
strtolower()
strtoupper()
ucfirst()
ucwords()
當在帶重音的文本中執行這些函數時(例如“acentua??o”),它們的返回值會丟失。從我的整個項目中刪除這些函數后,數據庫中的奇怪字符問題不再發生(包括通過 PHP 和 MySQL Workbench 進行查詢)。
我希望這可以幫助其他最終遇到與我相同問題的人。:)
注意:我花了很長時間才回答,因為我只能在將這些更改放入生產環境后才能驗證此信息。
- 1 回答
- 0 關注
- 105 瀏覽
添加回答
舉報
0/150
提交
取消