簡介
雖然許多語言每個必要字元都能一對一映射到 8 位元(bit)的值,但也有好幾種語言需要非常多的字元來書面通訊,以至於它們的編碼範圍不能僅僅包含在一個位元組裡(一個位元組 Byte 由 8 位元 bit 構成。每一位元僅能包含兩種不同的值: 1 或 0。所以,一位元組僅能夠表示 256 種不同的值,即 2 的八次方)。 開發多位元組字元編碼方案是為了在基於位元組的常規編碼系統中表達超過 256 個字元。
在你操作(trim、split、splice 等等)多位元組編碼的字串的時候,由於在這種編碼方案下,兩個或多個連續位元組可能只表達了一個字元,所以你需要使用專門的函數。 否則,當你將不能檢測多位元組字串的函數應用到這個字串的時候,它可能無法檢測多位元組字元的起始位置,並以亂碼字串結尾,基本丟失了它原來的意思。
mbstring 提供了針對多位元組字串的函數,能夠幫你處理 PHP 中的多位元組編碼。 除此以外,mbstring 還能在可能的字元編碼之間相互進行編碼轉換。 為了方便起見,mbstring 設計成了處理基於 Unicode 的編碼,類似 UTF-8、UCS-2 及諸多單位元組的編碼。
mbstring 不是一個預設擴充。這意味著它預設沒有被啟用。 你必須在 configure 選項中顯式啟用該模組。
HTTP 輸入和輸出
HTTP 輸入/輸出字元編碼轉換同樣也適用於位元據。 如果 HTTP 輸入/輸出用到了位元據,使用者應當控制字元的編碼轉換。
自 PHP 4.3.3 起,如果 HTML 表單的 enctype 屬性設定為 multipart/form-data,並且 php.ini 裡的mbstring.encoding_translation 設定為 On, POST 的變數以及上傳檔案的名稱也將會被轉換到內部字元編碼。 不過,轉換不會應用於查詢(query)的鍵。
HTTP 輸入在 PHP 指令碼裡無法控制 HTTP 輸入字元的轉換。 要禁用 HTTP 輸入字元的轉換,必須要在 php.ini 裡設定。
Example #1 在 php.ini 中禁用 HTTP 輸入轉換
;; 禁用 HTTP 輸入轉換mbstring.http_input = pass;;禁用 HTTP 輸入轉換 (PHP 4.3.0 或更高版本)mbstring.encoding_translation = Off
當 PHP 以 Apache 模組運行。這些設定還可以通過 httpd.conf 內每個虛擬機器主機(Virtual Host)指令或每個目錄下的 .htaccess來覆蓋(override)。
HTTP 輸出輸出字元編碼轉換的使用有幾種方式。 一種是使用 php.ini,另一種是使用 ob_start(),以 mb_output_handler() 作為 ob_start的回呼函數。
Example #2 php.ini 設定例子
;; 為所有 PHP 頁面啟用輸出字元編碼的轉換;; 啟用輸出緩衝output_buffering = On;; 設定 mb_output_handler 來進行輸出的轉換output_handler = mb_output_handler
Example #3 指令碼例子
<?php // 僅為此頁面啟用輸出字元編碼的轉換 // 設定 HTTP 輸出字元編碼為 SJIS mb_http_output('SJIS'); // 開始緩衝並指定 "mb_output_handler" 為回呼函數 ob_start('mb_output_handler');?>
多位元組字串 函數
mb_check_encoding — 檢查字串在指定的編碼裡是否有效
mb_convert_case — 對字串進行大小寫轉換
mb_convert_encoding — 轉換字元的編碼
mb_convert_kana — Convert "kana" one from another ("zen-kaku", "han-kaku" and more)
mb_convert_variables — 轉換一個或多個變數的字元編碼
mb_decode_mimeheader — 解碼 MIME 頭欄位中的字串
mb_decode_numericentity — 根據 HTML 數字字串解碼成字元
mb_detect_encoding — 檢測字元的編碼
mb_detect_order — 設定/擷取 字元編碼的檢測順序
mb_encode_mimeheader — 為 MIME 頭編碼字串
mb_encode_numericentity — Encode character to HTML numeric string reference
mb_encoding_aliases — Get aliases of a known encoding type
mb_ereg_match — Regular expression match for multibyte string
mb_ereg_replace_callback — Perform a regular expresssion seach and replace with multibyte support using a callback
mb_ereg_replace — Replace regular expression with multibyte support
mb_ereg_search_getpos — Returns start point for next regular expression match
mb_ereg_search_getregs — Retrieve the result from the last multibyte regular expression match
mb_ereg_search_init — Setup string and regular expression for a multibyte regular expression match
mb_ereg_search_pos — Returns position and length of a matched part of the multibyte regular expression for a predefined multibyte string
mb_ereg_search_regs — Returns the matched part of a multibyte regular expression
mb_ereg_search_setpos — Set start point of next regular expression match
mb_ereg_search — Multibyte regular expression match for predefined multibyte string
mb_ereg — Regular expression match with multibyte support
mb_eregi_replace — Replace regular expression with multibyte support ignoring case
mb_eregi — Regular expression match ignoring case with multibyte support
mb_get_info — 擷取 mbstring 的內部設定
mb_http_input — 檢測 HTTP 輸入字元編碼
mb_http_output — 設定/擷取 HTTP 輸出字元編碼
mb_internal_encoding — 設定/擷取內部字元編碼
mb_language — 設定/擷取當前的語言
mb_list_encodings — 返回所有支援編碼的數組
mb_output_handler — 在輸出緩衝中轉換字元編碼的回呼函數
mb_parse_str — 解析 GET/POST/COOKIE 資料並設定全域變數
mb_preferred_mime_name — 擷取 MIME 字串
mb_regex_encoding — Set/Get character encoding for multibyte regex
mb_regex_set_options — Set/Get the default options for mbregex functions
mb_send_mail — 發送編碼過的郵件
mb_split — 使用Regex分割多位元組字串
mb_strcut — 擷取字元的一部分
mb_strimwidth — 擷取按指定寬度截斷的字串
mb_stripos — 大小寫不敏感地尋找字串在另一個字串中首次出現的位置
mb_stristr — 大小寫不敏感地尋找字串在另一個字串裡的首次出現
mb_strlen — 擷取字串的長度
mb_strpos — 尋找字串在另一個字串中首次出現的位置
mb_strrchr — 尋找指定字元在另一個字串中最後一次的出現
mb_strrichr — 大小寫不敏感地尋找指定字元在另一個字串中最後一次的出現
mb_strripos — 大小寫不敏感地在字串中尋找一個字串最後出現的位置
mb_strrpos — 尋找字串在一個字串中最後出現的位置
mb_strstr — 尋找字串在另一個字串裡的首次出現
mb_strtolower — 使字串小寫
mb_strtoupper — 使字串大寫
mb_strwidth — 返回字串的寬度
mb_substitute_character — 設定/擷取替代字元
mb_substr_count — 統計字串出現的次數
mb_substr — 擷取字串的部分