當前位置: 首頁> 最新文章列表> mysqli::set_charset 設置後SQL 查詢亂碼?如何確保字符在傳輸中保持正確

mysqli::set_charset 設置後SQL 查詢亂碼?如何確保字符在傳輸中保持正確

gitbox 2025-09-20
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 前置無關代碼示例</span></span><span>
</span><span><span class="hljs-variable">$pre_data</span></span><span> = </span><span><span class="hljs-keyword">array</span></span><span>(</span><span><span class="hljs-string">"apple"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"cherry"</span></span><span>);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$pre_data</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$item</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strtoupper</span></span><span>(</span><span><span class="hljs-variable">$item</span></span><span>) . </span><span><span class="hljs-string">"<br>"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>

<hr>

</span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 文章正文開始</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<h1>mysqli::set_charset 設置後 SQL 查詢亂碼?如何確保字符在傳輸中保持正確</h1>"</span></span><span>;

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<p>在使用 PHP 的 <code>mysqli
" ; echo "

這裡utf8mb4是推薦的字符集,支持完整的Unicode,包括表情符號。

"
; echo "

3. 常見亂碼場景及解決方案

"
; echo "

場景1:表或字段編碼不一致

"
; echo "

即使set_charset設置正確,如果數據庫表或字段仍是latin1 ,中文或特殊字符會被錯誤解碼。

"
; echo "

解決方案:

"
; echo "
ALTER TABLE your_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
"
;
echo "

場景2:頁面顯示編碼不匹配

"
; echo "

如果網頁使用UTF-8編碼,而MySQL 數據是utf8mb4 ,正常情況下不會亂碼。但如果網頁聲明為ISO-8859-1或未聲明,中文仍會顯示異常。

"
; echo "

確保網頁頭部:

"
; echo "
<meta charset='UTF-8'>
"
;
echo "

場景3:插入數據前編碼不一致

"
; echo "

從表單或接口獲取的字符編碼必須與MySQL 連接編碼一致,否則在插入時就會產生亂碼。

"
; echo "

解決方案:統一編碼,例如前端和PHP 均使用UTF-8。

"
; echo "

4. 綜合最佳實踐

"
; echo "
    "
; echo "
  • 數據庫和表使用utf8mb4字符集。
  • "
    ; echo "
  • PHP 與MySQL 連接後立即調用mysqli::set_charset('utf8mb4')
  • "
    ; echo "
  • 前端網頁聲明<meta charset='UTF-8'> ,表單提交編碼為UTF-8。
  • "
    ; echo "
  • 避免手動使用utf8_encodeutf8_decode ,直接使用原始UTF-8 數據。
  • "
    ; echo " " ; echo "

    總結

    "
    ; echo

    "字符亂碼通常是因為客戶端、數據庫和顯示端編碼不一致。使用mysqli::set_charset是確保PHP 與MySQL 通信正確的關鍵步驟,但必須結合數據庫表和頁面編碼統一,才能徹底解決亂碼問題。 "

    ; ?> <?php // 尾部無關代碼示例 $footer_links = array ( "Home" , "About" , "Contact" ); foreach ( $footer_links as $link ) { echo " " . ucfirst ( $link ) . " | " ; } ?>