首頁 >後端開發 >php教程 >php多位元組字串

php多位元組字串

伊谢尔伦
伊谢尔伦原創
2016-11-21 17:58:371318瀏覽

簡介

雖然許多語言每個必要字符都能一對一映射到8 比特(bit)的值,但也有好幾種語言需要非常多的字符來書面通訊,以至於它們的編碼範圍不能僅僅包含在一個位元組裡(一個位元組Byte 由8 個位元組 構成。每一位元只能包含兩種不同的值: 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(&#39;SJIS&#39;);
    // 开始缓冲并指定 "mb_output_handler" 为回调函数
    ob_start(&#39;mb_output_handler&#39;);
?>

多位元組字串函數

mb_check_encoding — 檢查字串在指定的字串函數

mb_check_encoding — 檢查字串在指定的符號寫入轉換

mb_convert_encoding — 轉換字元的編碼

mb_convert_kana — Convert "kana" one from another ("zen-kaku", "han-kaku" and more)

_con

mb_decode_mimeheader — 解碼MIME 頭字段中的字串

mb_decode_numericentity — 依據HTML 數字字串解碼成字元

mb_detect_encoding d_mgg; mimeheader — 為MIME 頭編碼字串

mb_encode_numericentity — Encode character to HTML numeric string reference

mb_encoding_aliases — Get aliases of a known encoding type

_natcha_strwm 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 supularsearch expression matcha​​anatfig; 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 matchm peridperionat fat面莜<;

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 mb_ 1string 的內部編碼_output — 設定/取得HTTP 輸出字元編碼

mb_internal_encoding — 設定/取得內部字元編碼

mb_language — 設定/取得目前的語言

mb_list_encodings — 傳回所有支援編碼的陣列

_pun_list_encodings — 傳回所有支援編碼的數位化

_p_mb_out / POST/COOKIE 資料並設定全域變數

mb_preferred_mime_name — 取得MIME 字串

mb_regex_encoding — Set/Get character encoding for multibyte regextion版本tion the function s s

mb_send_mail — 發送編碼過的郵件

mb_split — 使用正規表示式分割多位元組字串

mb_strcut — 取得字元的部份

mb_strimwidth — 取得依指定寬度截斷的串中首次出現的位置

mb_stristr — 大小寫不敏感地找出字串在另一個字串裡的首次出現

mb_strlen — 取得字串的長度

mb_strpos — 尋找字串在另一個字串中首次找到字串的長度

mb_strpos — 查找字串在另一個字串中首次出現的位置

mb_strrchr — 尋找指定字元在另一個字串中最後一次的出現

mb_strrichr — 大小寫不敏感地找出指定字元在另一個字串中最後一次的出現

mb_strripos在字串中尋找一個字串最後出現的位置

mb_strrpos — 尋找字串在一個字串中最後出現的位置

mb_strstr — 尋找字串在另一個字串裡的首次出現

mb_strtolower _str字串小寫

mb_strtoupper — 讓字串大寫

mb_strwidth — 傳回字串的寬度

mb_substitute_character — 設定/取得

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn