字符串類型介紹和處理_第1頁
字符串類型介紹和處理_第2頁
字符串類型介紹和處理_第3頁
字符串類型介紹和處理_第4頁
字符串類型介紹和處理_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

PHP字符串類型介紹和處理趙巍

2018-09-201String字符串的簡介2String字符串的定義3

String字符串的函數(shù)分類4String字符串常用函數(shù)舉例String字符串介紹String字符串PHP中一種重要的數(shù)據(jù)類型,一個(gè)字符串string就是由一系列的字符組成,其中每個(gè)字符等同于一個(gè)字節(jié)。這意味著PHP只能支持256的字符集(ASCII碼),因此不支持Unicode。簡單解釋下PHP底層不支持Unicode:PHP字符串不保存字符的編碼信息,所以原生操作函數(shù),并不知道二進(jìn)制數(shù)據(jù)該如何對應(yīng)文本,只能假設(shè)一個(gè)字符對應(yīng)單個(gè)字節(jié)。這樣在處理英文等ASCII碼時(shí)夠用了,但對于中文等多字節(jié)字符,就會出錯(cuò)了。String字符串介紹字符串類型詳解PHP中的string的實(shí)現(xiàn)方式是一個(gè)由字節(jié)組成的數(shù)組再加上一個(gè)整數(shù)指明緩沖區(qū)長度。并無如何將字節(jié)轉(zhuǎn)換成字符的信息,由程序員來決定。字符串由什么值來組成并無限制;特別的,其值為0(“NULbytes”)的字節(jié)可以處于字符串任何位置(不過有幾個(gè)函數(shù),在本手冊中被稱為非“二進(jìn)制安全”的,也許會把NUL字節(jié)之后的數(shù)據(jù)全都忽略)。字符串類型的此特性解釋了為什么PHP中沒有單獨(dú)的“byte”類型-已經(jīng)用字符串來代替了。返回非文本值的函數(shù)-例如從網(wǎng)絡(luò)套接字讀取的任意數(shù)據(jù)-仍會返回字符串。由于PHP并不特別指明字符串的編碼,那字符串到底是怎樣編碼的呢?例如字符串"á"到底是等于"\xE1"(ISO-8859-1),"\xC3\xA1"(UTF-8,Cform),"\x61\xCC\x81"(UTF-8,Dform)還是任何其它可能的表達(dá)呢?答案是字符串會被按照該腳本文件相同的編碼方式來編碼。因此如果一個(gè)腳本的編碼是ISO-8859-1,則其中的字符串也會被編碼為ISO-8859-1,以此類推。不過這并不適用于激活了ZendMultibyte時(shí);此時(shí)腳本可以是以任何方式編碼的(明確指定或被自動檢測)然后被轉(zhuǎn)換為某種內(nèi)部編碼,然后字符串將被用此方式編碼。注意腳本的編碼有一些約束(如果激活了ZendMultibyte則是其內(nèi)部編碼)-這意味著此編碼應(yīng)該是ASCII的兼容超集,例如UTF-8或ISO-8859-1。不過要注意,依賴狀態(tài)的編碼其中相同的字節(jié)值可以用于首字母和非首字母而轉(zhuǎn)換狀態(tài),這可能會造成問題。當(dāng)然了,要做到有用,操作文本的函數(shù)必須假定字符串是如何編碼的。不幸的是,PHP關(guān)于此的函數(shù)有很多變種:某些函數(shù)假定字符串是以單字節(jié)編碼的,但并不需要將字節(jié)解釋為特定的字符。例如substr(),strpos(),strlen()和strcmp()。理解這些函數(shù)的另一種方法是它們作用于內(nèi)存緩沖區(qū),即按照字節(jié)和字節(jié)下標(biāo)操作。某些函數(shù)被傳遞入了字符串的編碼方式,也可能會假定默認(rèn)無此信息。例如htmlentities()和mbstring擴(kuò)展中的大部分函數(shù)。其它函數(shù)使用了當(dāng)前區(qū)域(見setlocale()),但是逐字節(jié)操作。例如strcasecmp(),strtoupper()和ucfirst()。這意味著這些函數(shù)只能用于單字節(jié)編碼,而且編碼要與區(qū)域匹配。例如strtoupper("á")在區(qū)域設(shè)定正確并且á是單字節(jié)編碼時(shí)會返回"á"。如果是用UTF-8編碼則不會返回正確結(jié)果,其結(jié)果根據(jù)當(dāng)前區(qū)域有可能返回?fù)p壞的值。最后一些函數(shù)會假定字符串是使用某特定編碼的,通常是UTF-8。intl擴(kuò)展和PCRE(上例中僅在使用了u修飾符時(shí))擴(kuò)展中的大部分函數(shù)都是這樣。盡管這是由于其特殊用途,utf8_decode()會假定UTF-8編碼而utf8_encode()會假定ISO-8859-1編碼。最后,要書寫能夠正確使用Unicode的程序依賴于很小心地避免那些可能會損壞數(shù)據(jù)的函數(shù)。要使用來自于intl和mbstring擴(kuò)展的函數(shù)。不過使用能處理Unicode編碼的函數(shù)只是個(gè)開始。不管用何種語言提供的函數(shù),最基本的還是了解Unicode規(guī)格。例如一個(gè)程序如果假定只有大寫和小寫,那可是大錯(cuò)特錯(cuò)。

String字符串的定義語法字符串是PHP中的標(biāo)量類型之一,字符串是一系列字符。字符串可以使用單引號、雙引號、heredoc語法結(jié)構(gòu)(定界符)、nowdoc語法結(jié)構(gòu)(自PHP5.3.0起);這四種方法定義。String字符串的定義單引號:定義一個(gè)字符串的最簡單的方法是用單引號把它包圍起來(字符')。要表達(dá)一個(gè)單引號自身,需在它的前面加個(gè)反斜線(\)來轉(zhuǎn)義。要表達(dá)一個(gè)反斜線自身,則用兩個(gè)反斜線(\\)。其它任何方式的反斜線都會被當(dāng)成反斜線本身:也就是說如果想使用其它轉(zhuǎn)義序列例如\r或者\(yùn)n,并不代表任何特殊含義,就單純是這兩個(gè)字符本身。Note:不像雙引號和heredoc語法結(jié)構(gòu),在單引號字符串中的變量和特殊字符的轉(zhuǎn)義序列將不會被替換。例子://輸出:Arnoldoncesaid:"I'llbeback"echo'Arnoldoncesaid:"I\'llbeback"';//輸出:YoudeletedC:\*.*?echo'YoudeletedC:\\*.*?';//輸出:Thiswillnotexpand:\nanewlineecho'Thiswillnotexpand:\nanewline';雙引號:如果字符串是包圍在雙引號(“)中,PHP將對一些特殊的字符進(jìn)行解析,例如和單引號字符串一樣,轉(zhuǎn)義任何其它字符都會導(dǎo)致反斜線被顯示出來。PHP5.1.1以前,\{$var}中的反斜線還不會被顯示出來。用雙引號定義的字符串最重要的特征是變量會被解析。它提供了解析變量、數(shù)組值,或者對象屬性方法。如果是復(fù)雜的語句,可以用花括號括起一個(gè)表達(dá)式。String字符串的定義String字符串的定義Heredoc結(jié)構(gòu)第三種表達(dá)字符串的方法是用heredoc句法結(jié)構(gòu):<<<。在該運(yùn)算符之后要提供一個(gè)標(biāo)識符,然后換行。接下來是字符串string本身,最后要用前面定義的標(biāo)識符作為結(jié)束標(biāo)志。結(jié)束時(shí)所引用的標(biāo)識符必須在該行的第一列,而且,標(biāo)識符的命名也要像其它標(biāo)簽一樣遵守PHP的規(guī)則:只能包含字母、數(shù)字和下劃線,并且必須以字母和下劃線作為開頭。Heredoc結(jié)構(gòu)就象是沒有使用雙引號的雙引號字符串,這就是說在heredoc結(jié)構(gòu)中單引號不用被轉(zhuǎn)義,但是上文中列出的轉(zhuǎn)義序列還可以使用。變量將被替換,但在heredoc結(jié)構(gòu)中含有復(fù)雜的變量時(shí)要格外小心。Note:要注意的是結(jié)束標(biāo)識符這行除了可能有一個(gè)分號(;)外,絕對不能包含其它字符。這意味著標(biāo)識符不能縮進(jìn),分號的前后也不能有任何空白或制表符。更重要的是結(jié)束標(biāo)識符的前面必須是個(gè)被本地操作系統(tǒng)認(rèn)可的換行,比如在UNIX和MacOSX系統(tǒng)中是\n,而結(jié)束定界符(可能其后有個(gè)分號)之后也必須緊跟一個(gè)換行。如果不遵守該規(guī)則導(dǎo)致結(jié)束標(biāo)識不“干凈”,PHP將認(rèn)為它不是結(jié)束標(biāo)識符而繼續(xù)尋找。如果在文件結(jié)束前也沒有找到一個(gè)正確的結(jié)束標(biāo)識符,PHP將會在最后一行產(chǎn)生一個(gè)解析錯(cuò)誤。

Heredocs結(jié)構(gòu)不能用來初始化類的屬性。自PHP5.3起,此限制僅對heredoc包含變量時(shí)有效。

String字符串的定義Nowdoc結(jié)構(gòu)就像heredoc結(jié)構(gòu)類似于雙引號字符串,Nowdoc結(jié)構(gòu)是類似于單引號字符串的。Nowdoc結(jié)構(gòu)很象heredoc結(jié)構(gòu),但是nowdoc中不進(jìn)行解析操作。這種結(jié)構(gòu)很適合用于嵌入PHP代碼或其它大段文本而無需對其中的特殊字符進(jìn)行轉(zhuǎn)義。與SGML的<![CDATA[]]>結(jié)構(gòu)是用來聲明大段的不用解析的文本類似,nowdoc結(jié)構(gòu)也有相同的特征。一個(gè)nowdoc結(jié)構(gòu)也用和heredocs結(jié)構(gòu)一樣的標(biāo)記<<<,但是跟在后面的標(biāo)識符要用單引號括起來,即<<<'EOT'。Heredoc結(jié)構(gòu)的所有規(guī)則也同樣適用于nowdoc結(jié)構(gòu),尤其是結(jié)束標(biāo)識符的規(guī)則。Note:不像heredoc結(jié)構(gòu),nowdoc結(jié)構(gòu)可以用在任意的靜態(tài)數(shù)據(jù)環(huán)境中,最典型的示例是用來初始化類的屬性或常量Nowdoc結(jié)構(gòu)是在PHP5.3.0中加入的.

String字符串的函數(shù)分類

在C語言中字符串是作為字節(jié)數(shù)組處理的。在Java語言中字符串是作為對象處理的。而php則把字符串作為基本數(shù)據(jù)類型來處理。通常對字符串的處理涉及字符串的格式化。字符串的分割和連接、字符串的比較、以及字符串的查找、匹配和替換等等。首先,字符串運(yùn)算符有兩個(gè)字符串(string)運(yùn)算符。第一個(gè)是連接運(yùn)算符(“.”),它返回其左右參數(shù)連接后的字符串。第二個(gè)是連接賦值運(yùn)算符(“.=”),它將右邊參數(shù)附加到左邊的參數(shù)之后。

注意:雙引號中的變量可以自動轉(zhuǎn)換為對應(yīng)字符串值。String字符串常用函數(shù)舉例字符串定位

strpos—查找字符串首次出現(xiàn)的位置stripos()-查找字符串首次出現(xiàn)的位置(不區(qū)分大小寫)strrpos—計(jì)算指定字符串在目標(biāo)字符串中最后一次出現(xiàn)的位置strripos—計(jì)算指定字符串在目標(biāo)字符串中最后一次出現(xiàn)的位置(不區(qū)分大小寫)

strstr—查找字符串的首次出現(xiàn)

stristr—strstr函數(shù)的忽略大小寫版本

String字符串常用函數(shù)舉例

字符串比較

strcmp

—二進(jìn)制安全字符串比較(二進(jìn)制比較,區(qū)分大小寫)strcasecmp()-二進(jìn)制安全比較字符串(二進(jìn)制比較,不區(qū)分大小寫)String字符串常用函數(shù)舉例字符串格式化

trim—去除字符串首尾處的空白字符(或者其他字符)

ltrim—?jiǎng)h除字符串開頭的空白字符(或其他字符)

rtrim—?jiǎng)h除字符串末端的空白字符(或者其他字符)

strtolower—將字符串轉(zhuǎn)化為小寫

strtoupper—將字符串轉(zhuǎn)化為大寫

lcfirst—使一個(gè)字符串的第一個(gè)字符小寫

ucfirst—將字符串的首字母轉(zhuǎn)換為大寫

ucwords—將字符串中每個(gè)單詞的首字母轉(zhuǎn)換為大寫String字符串常用函數(shù)舉例字符串輸入與輸出

vfprintf—將格式化字符串寫入流

vprintf—輸出格式化字符串

vsprintf—返回格式化字符串

fprintf—將格式化后的字符串寫入到流

print—輸出字符串

printf—輸出格式化字符串

echo—輸出一個(gè)或多個(gè)字符串

sscanf—根據(jù)指定格式解析輸入的字符String字符串常用函數(shù)舉例字符串加密

md5—計(jì)算字符串的MD5散列值

sha1—計(jì)算字符串的sha1散列值

String字符串常用函數(shù)舉例字符串與數(shù)組

str_s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論