特別是在編寫用於不同伺服器上的 PHP 指令碼時,最好在每個服務文件的頂部明確設定內部編碼,例如:
mb_internal_encoding("UTF-8");
這與 mysql 語句 "SET NAMES 'utf8'" 結合使用,將能省下很多除錯的麻煩。
此外,請使用多位元組字串函式,而不是您可能習慣使用的函式,例如 mb_strlen() 而不是 strlen() 等。
(PHP 4 >= 4.0.6,PHP 5,PHP 7,PHP 8)
mb_internal_encoding — 設定/取得內部字元編碼
encoding
encoding
是用於 HTTP 輸入字元編碼轉換、HTTP 輸出字元編碼轉換以及 mbstring 模組定義的字串函式的預設字元編碼名稱。您應該注意,內部編碼與多位元組正規表示式的編碼完全不同。
從 PHP 8.0.0 開始,如果 encoding
的值是無效的編碼,則會拋出 ValueError。在 PHP 8.0.0 之前,會發出 E_WARNING
。
版本 | 描述 |
---|---|
8.0.0 |
encoding 現在可為空值。 |
8.0.0 | 如果 encoding 是無效的編碼,現在會拋出 ValueError。先前會發出 E_WARNING 。 |
範例 #1 mb_internal_encoding() 範例
<?php
/* 設定內部字元編碼為 UTF-8 */
mb_internal_encoding("UTF-8");
/* 顯示目前的內部字元編碼 */
echo mb_internal_encoding();
?>
特別是在編寫用於不同伺服器上的 PHP 指令碼時,最好在每個服務文件的頂部明確設定內部編碼,例如:
mb_internal_encoding("UTF-8");
這與 mysql 語句 "SET NAMES 'utf8'" 結合使用,將能省下很多除錯的麻煩。
此外,請使用多位元組字串函式,而不是您可能習慣使用的函式,例如 mb_strlen() 而不是 strlen() 等。
全部一起
<?php
// ------------------------------------------------------------
header('Content-Type: text/html; charset=UTF-8');
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
mb_regex_encoding('UTF-8');
// ------------------------------------------------------------
?>
請注意,來源檔案中的字串必須與您透過 mb_internal_encoding 指定的編碼相符。解析器似乎會從檔案載入原始位元組,並參考其內部編碼來判斷其實際編碼。
為了示範,當 /source/ 檔案是以 Latin-1 編碼時,以下輸出如預期:
<?php
mb_internal_encoding("iso-8859-1");
mb_http_output( "UTF-8" );
ob_start("mb_output_handler");
echo "???<br/>";
?>???
現在,mb_internal_encoding 的典型用法如下所示。將變更設定為 "utf-8",但保持 /source/ 檔案編碼不變:
<?php
mb_internal_encoding("UTF-8");
mb_http_output( "UTF-8" );
ob_start("mb_output_handler");
echo "???<br/>";
?>???
輸出只會顯示 <br/> 標籤,沒有文字。
將檔案另存為 UTF-8 編碼,然後結果就會如預期。
回覆 mortoray at ecircle-ag dot com
只要您將編碼設定為更相容 "Latin 1" 的編碼(例如 US-ACSII、ISO-8859-1、ISO-8859-1 或 Windows 1252),字元就會正常顯示。PHP.net 會自動偵測為 UTF-8