php字串由一系列的字元組成,其中每個字元等同於一個位元組,這意味著PHP只能支援256的字元集,因此不支援Unicode;在PHP中字串的實作方式是由位元組組成的陣列再加上一個整數指明緩衝區長度。
本教學操作環境:Windows10系統、PHP8.1版、DELL G3電腦
php字串由什麼組成?
一個字串 string 就是由一系列的字元組成,其中每個字元等同於一個位元組。這意味著 PHP 只能支援 256 的字元集,因此不支援 Unicode 。
字串型別詳解
PHP 中的 string 的實作方式是由位元組組成的陣列再加上一個整數指明緩衝區長度。並無如何將位元組轉換成字元的訊息,由程式設計師來決定。字串由什麼值來組成並無限制;特別的,其值為0(“NUL bytes”)的位元組可以處於字串任何位置(不過有幾個函數,在本手冊中被稱為非“二進制安全」的,也許會把NUL 位元組之後的資料全都忽略)。
字串類型的此特性解釋了為什麼 PHP 中沒有單獨的「byte」類型 - 已經用字串來取代了。傳回非文字值的函數 - 例如從網路套接字讀取的任意資料 - 仍會傳回字串。
由於 PHP 並沒有特別指明字串的編碼,那字串到底是怎麼編碼的呢?例如字串"á" 到底是等於"\xE1"(ISO-8859-1),"\xC3\xA1"(UTF-8,C form),"\x61\xCC\x81"(UTF-8,D form)還是任何其它可能的表達呢?答案是字串會被按照該腳本檔案相同的編碼方式來編碼。因此如果一個腳本的編碼是 ISO-8859-1,則其中的字串也會被編碼為 ISO-8859-1,以此類推。不過這並不適用於激活了 Zend Multibyte 時;此時腳本可以是以任何方式編碼的(明確指定或被自動檢測)然後被轉換為某種內部編碼,然後字符串將被用此方式編碼。注意腳本的編碼有一些限制(如果啟動了 Zend Multibyte 則是其內部編碼)- 這表示此編碼應該是 ASCII 的相容超集,例如 UTF-8 或 ISO-8859-1。不過要注意,依賴狀態的編碼其中相同的位元組值可以用於首字母和非首字母而轉換狀態,這可能會造成問題。
當然了,要做到有用,操作文字的函數必須假定字串是如何編碼的。不幸的是,PHP 關於此的函數有很多變種:
某些函數假定字串是以單字節編碼的,但並不需要將位元組解釋為特定的字元。例如 substr(),strpos(),strlen() 和 strcmp()。理解這些函數的另一種方法是它們作用於記憶體緩衝區,即按照位元組和位元組下標操作。
某些函數被傳遞入了字串的編碼方式,也可能會假定預設無此資訊。例如 htmlentities() 和 mbstring 擴充中的大部分函數。
其它函數使用了目前區域(見 setlocale()),但是逐字節操作。
最後一些函數會假設字串是使用某特定編碼的,通常是 UTF-8。 intl 擴展和 PCRE(上例中僅在使用了 u 修飾符時)擴展中的大部分函數都是這樣。
最後,要書寫能夠正確使用 Unicode 的程式依賴於很小心地避免那些可能會損壞資料的函數。要使用來自於 intl 和 mbstring 擴充的函數。不過使用能處理 Unicode 編碼的函數只是個開始。不管用何種語言提供的函數,最基本的還是了解 Unicode 規格。例如一個程式如果假定只有大寫和小寫,那可是大錯特錯。
推薦學習:《PHP影片教學》
以上是php字串由什麼組成的詳細內容。更多資訊請關注PHP中文網其他相關文章!