PHP開發 多位元組字串處理及字元編碼

2022-09-12 01:09:15 字數 1262 閱讀 6860

mbstring 擴充套件

我們所說的多位元組字元指的是不在傳統的 128 個 ascii 字符集中的字元,比如中文字元。而 php 中處理字串的函式預設假設所有字元都是 8 位字元,占用乙個位元組,如果使用這些 php 原生的字串處理函式處理包含多位元組字元的 unicode 字串,會得到意料之外的錯誤結果。

為了避免處理多位元組字元出錯,可以安裝mbstring擴充套件。這個擴充套件提供了處理多位元組字串的函式,能替代大多數 php 原生的處理字串的函式,例如,可以使用mb_strlen()替代原生的strlen()函式來獲取字串長度。

注:更多多位元組字串處理函式請參考官方文件

lar**el 底層的字串處理函式很多也用到mbstring提供的函式對字串進行處理。詳見illuminate\support\str類,這個比較簡單,這裡就不做贅述了。

字元編碼

字元編碼是打包 unicode 資料的方式,以便把資料儲存在記憶體中,或者在伺服器和瀏覽器之間傳輸。utf-8 是多種可用字元編碼中的一種,但是是最流行的一種,所有現代 web 瀏覽器都支援。

處理多位元組字串的時候,記住以下幾個建議:

mbstring 擴充套件不僅能處理 unicode 字串,還能在不同的字元編碼之間轉換多位元組字串。我們可以使用mb_detect_encoding()方法檢測字元編碼,然後使用mb_convert_encoding()方法轉換字元編碼。

輸出 utf-8 資料

處理多位元組字串的時候,需要告知 php 使用 utf-8 字元編碼,我們可以在php.ini中進行全域性設定:

default_charset = "utf-8";
很多 php 函式都會使用這個預設的字元編碼,如htmlentities()、html_entity_decode()htmlspecialchars(),以及mbstring擴充套件提供的函式。

在瀏覽器輸出時,我們可以通過header()函式指定輸出資料字元編碼:

<?php
我們還建議在 html 文件的頭部加上這個 meta 標籤:

多位元組字串轉寬位元組字串(windows)

windows函式 multibytetowidechar提供將多位元組字串轉換為寬位元組字串的功能 參考windows核心程式設計2.8 int multibytetowidechar uint ucodepage,dword dwflags,pcstr pmultibytestr,int cbm...

PHP最佳實踐之多位元組字串 字元編碼

多位元組字串 1 php假設字串中的每乙個字元都是八位字元,占用乙個位元組的記憶體。但是,你有可能會遇到多位元組字串。2 這裡所說的多位元組字串是指不在傳統的128個ascii字符集中的字元。如果使用php原生的字串函式處理這些多位元組unicode字串,會得到意外的錯誤。3 安裝mbstring擴...

多位元組字串與寬字串的轉換

多位元組字串與寬字串的轉換可使用c api者win32 api.c api mbstowcs,wcstombs win32 api multibytetowidechar,widechartomultibyte 下面著重介紹win32 api的用法,c api的用法較為簡單可參照win32 api。...