版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PHP字符串類型介紹和處理趙巍
2018-09-201String字符串的簡(jiǎn)介2String字符串的定義3
String字符串的函數(shù)分類4String字符串常用函數(shù)舉例String字符串介紹String字符串PHP中一種重要的數(shù)據(jù)類型,一個(gè)字符串string就是由一系列的字符組成,其中每個(gè)字符等同于一個(gè)字節(jié)。這意味著PHP只能支持256的字符集(ASCII碼),因此不支持Unicode。簡(jiǎn)單解釋下PHP底層不支持Unicode:PHP字符串不保存字符的編碼信息,所以原生操作函數(shù),并不知道二進(jìn)制數(shù)據(jù)該如何對(duì)應(yīng)文本,只能假設(shè)一個(gè)字符對(duì)應(yīng)單個(gè)字節(jié)。這樣在處理英文等ASCII碼時(shí)夠用了,但對(duì)于中文等多字節(jié)字符,就會(huì)出錯(cuò)了。String字符串介紹字符串類型詳解PHP中的string的實(shí)現(xiàn)方式是一個(gè)由字節(jié)組成的數(shù)組再加上一個(gè)整數(shù)指明緩沖區(qū)長(zhǎng)度。并無(wú)如何將字節(jié)轉(zhuǎn)換成字符的信息,由程序員來(lái)決定。字符串由什么值來(lái)組成并無(wú)限制;特別的,其值為0(“NULbytes”)的字節(jié)可以處于字符串任何位置(不過(guò)有幾個(gè)函數(shù),在本手冊(cè)中被稱為非“二進(jìn)制安全”的,也許會(huì)把NUL字節(jié)之后的數(shù)據(jù)全都忽略)。字符串類型的此特性解釋了為什么PHP中沒(méi)有單獨(dú)的“byte”類型-已經(jīng)用字符串來(lái)代替了。返回非文本值的函數(shù)-例如從網(wǎng)絡(luò)套接字讀取的任意數(shù)據(jù)-仍會(huì)返回字符串。由于PHP并不特別指明字符串的編碼,那字符串到底是怎樣編碼的呢?例如字符串"á"到底是等于"\xE1"(ISO-8859-1),"\xC3\xA1"(UTF-8,Cform),"\x61\xCC\x81"(UTF-8,Dform)還是任何其它可能的表達(dá)呢?答案是字符串會(huì)被按照該腳本文件相同的編碼方式來(lái)編碼。因此如果一個(gè)腳本的編碼是ISO-8859-1,則其中的字符串也會(huì)被編碼為ISO-8859-1,以此類推。不過(guò)這并不適用于激活了ZendMultibyte時(shí);此時(shí)腳本可以是以任何方式編碼的(明確指定或被自動(dòng)檢測(cè))然后被轉(zhuǎn)換為某種內(nèi)部編碼,然后字符串將被用此方式編碼。注意腳本的編碼有一些約束(如果激活了ZendMultibyte則是其內(nèi)部編碼)-這意味著此編碼應(yīng)該是ASCII的兼容超集,例如UTF-8或ISO-8859-1。不過(guò)要注意,依賴狀態(tài)的編碼其中相同的字節(jié)值可以用于首字母和非首字母而轉(zhuǎn)換狀態(tài),這可能會(huì)造成問(wèn)題。當(dāng)然了,要做到有用,操作文本的函數(shù)必須假定字符串是如何編碼的。不幸的是,PHP關(guān)于此的函數(shù)有很多變種:某些函數(shù)假定字符串是以單字節(jié)編碼的,但并不需要將字節(jié)解釋為特定的字符。例如substr(),strpos(),strlen()和strcmp()。理解這些函數(shù)的另一種方法是它們作用于內(nèi)存緩沖區(qū),即按照字節(jié)和字節(jié)下標(biāo)操作。某些函數(shù)被傳遞入了字符串的編碼方式,也可能會(huì)假定默認(rèn)無(wú)此信息。例如htmlentities()和mbstring擴(kuò)展中的大部分函數(shù)。其它函數(shù)使用了當(dāng)前區(qū)域(見(jiàn)setlocale()),但是逐字節(jié)操作。例如strcasecmp(),strtoupper()和ucfirst()。這意味著這些函數(shù)只能用于單字節(jié)編碼,而且編碼要與區(qū)域匹配。例如strtoupper("á")在區(qū)域設(shè)定正確并且á是單字節(jié)編碼時(shí)會(huì)返回"á"。如果是用UTF-8編碼則不會(huì)返回正確結(jié)果,其結(jié)果根據(jù)當(dāng)前區(qū)域有可能返回?fù)p壞的值。最后一些函數(shù)會(huì)假定字符串是使用某特定編碼的,通常是UTF-8。intl擴(kuò)展和PCRE(上例中僅在使用了u修飾符時(shí))擴(kuò)展中的大部分函數(shù)都是這樣。盡管這是由于其特殊用途,utf8_decode()會(huì)假定UTF-8編碼而utf8_encode()會(huì)假定ISO-8859-1編碼。最后,要書(shū)寫(xiě)能夠正確使用Unicode的程序依賴于很小心地避免那些可能會(huì)損壞數(shù)據(jù)的函數(shù)。要使用來(lái)自于intl和mbstring擴(kuò)展的函數(shù)。不過(guò)使用能處理Unicode編碼的函數(shù)只是個(gè)開(kāi)始。不管用何種語(yǔ)言提供的函數(shù),最基本的還是了解Unicode規(guī)格。例如一個(gè)程序如果假定只有大寫(xiě)和小寫(xiě),那可是大錯(cuò)特錯(cuò)。
String字符串的定義語(yǔ)法字符串是PHP中的標(biāo)量類型之一,字符串是一系列字符。字符串可以使用單引號(hào)、雙引號(hào)、heredoc語(yǔ)法結(jié)構(gòu)(定界符)、nowdoc語(yǔ)法結(jié)構(gòu)(自PHP5.3.0起);這四種方法定義。String字符串的定義單引號(hào):定義一個(gè)字符串的最簡(jiǎn)單的方法是用單引號(hào)把它包圍起來(lái)(字符')。要表達(dá)一個(gè)單引號(hào)自身,需在它的前面加個(gè)反斜線(\)來(lái)轉(zhuǎn)義。要表達(dá)一個(gè)反斜線自身,則用兩個(gè)反斜線(\\)。其它任何方式的反斜線都會(huì)被當(dāng)成反斜線本身:也就是說(shuō)如果想使用其它轉(zhuǎn)義序列例如\r或者\(yùn)n,并不代表任何特殊含義,就單純是這兩個(gè)字符本身。Note:不像雙引號(hào)和heredoc語(yǔ)法結(jié)構(gòu),在單引號(hào)字符串中的變量和特殊字符的轉(zhuǎn)義序列將不會(huì)被替換。例子://輸出:Arnoldoncesaid:"I'llbeback"echo'Arnoldoncesaid:"I\'llbeback"';//輸出:YoudeletedC:\*.*?echo'YoudeletedC:\\*.*?';//輸出:Thiswillnotexpand:\nanewlineecho'Thiswillnotexpand:\nanewline';雙引號(hào):如果字符串是包圍在雙引號(hào)(“)中,PHP將對(duì)一些特殊的字符進(jìn)行解析,例如和單引號(hào)字符串一樣,轉(zhuǎn)義任何其它字符都會(huì)導(dǎo)致反斜線被顯示出來(lái)。PHP5.1.1以前,\{$var}中的反斜線還不會(huì)被顯示出來(lái)。用雙引號(hào)定義的字符串最重要的特征是變量會(huì)被解析。它提供了解析變量、數(shù)組值,或者對(duì)象屬性方法。如果是復(fù)雜的語(yǔ)句,可以用花括號(hào)括起一個(gè)表達(dá)式。String字符串的定義String字符串的定義Heredoc結(jié)構(gòu)第三種表達(dá)字符串的方法是用heredoc句法結(jié)構(gòu):<<<。在該運(yùn)算符之后要提供一個(gè)標(biāo)識(shí)符,然后換行。接下來(lái)是字符串string本身,最后要用前面定義的標(biāo)識(shí)符作為結(jié)束標(biāo)志。結(jié)束時(shí)所引用的標(biāo)識(shí)符必須在該行的第一列,而且,標(biāo)識(shí)符的命名也要像其它標(biāo)簽一樣遵守PHP的規(guī)則:只能包含字母、數(shù)字和下劃線,并且必須以字母和下劃線作為開(kāi)頭。Heredoc結(jié)構(gòu)就象是沒(méi)有使用雙引號(hào)的雙引號(hào)字符串,這就是說(shuō)在heredoc結(jié)構(gòu)中單引號(hào)不用被轉(zhuǎn)義,但是上文中列出的轉(zhuǎn)義序列還可以使用。變量將被替換,但在heredoc結(jié)構(gòu)中含有復(fù)雜的變量時(shí)要格外小心。Note:要注意的是結(jié)束標(biāo)識(shí)符這行除了可能有一個(gè)分號(hào)(;)外,絕對(duì)不能包含其它字符。這意味著標(biāo)識(shí)符不能縮進(jìn),分號(hào)的前后也不能有任何空白或制表符。更重要的是結(jié)束標(biāo)識(shí)符的前面必須是個(gè)被本地操作系統(tǒng)認(rèn)可的換行,比如在UNIX和MacOSX系統(tǒng)中是\n,而結(jié)束定界符(可能其后有個(gè)分號(hào))之后也必須緊跟一個(gè)換行。如果不遵守該規(guī)則導(dǎo)致結(jié)束標(biāo)識(shí)不“干凈”,PHP將認(rèn)為它不是結(jié)束標(biāo)識(shí)符而繼續(xù)尋找。如果在文件結(jié)束前也沒(méi)有找到一個(gè)正確的結(jié)束標(biāo)識(shí)符,PHP將會(huì)在最后一行產(chǎn)生一個(gè)解析錯(cuò)誤。
Heredocs結(jié)構(gòu)不能用來(lái)初始化類的屬性。自PHP5.3起,此限制僅對(duì)heredoc包含變量時(shí)有效。
String字符串的定義Nowdoc結(jié)構(gòu)就像heredoc結(jié)構(gòu)類似于雙引號(hào)字符串,Nowdoc結(jié)構(gòu)是類似于單引號(hào)字符串的。Nowdoc結(jié)構(gòu)很象heredoc結(jié)構(gòu),但是nowdoc中不進(jìn)行解析操作。這種結(jié)構(gòu)很適合用于嵌入PHP代碼或其它大段文本而無(wú)需對(duì)其中的特殊字符進(jìn)行轉(zhuǎn)義。與SGML的<![CDATA[]]>結(jié)構(gòu)是用來(lái)聲明大段的不用解析的文本類似,nowdoc結(jié)構(gòu)也有相同的特征。一個(gè)nowdoc結(jié)構(gòu)也用和heredocs結(jié)構(gòu)一樣的標(biāo)記<<<,但是跟在后面的標(biāo)識(shí)符要用單引號(hào)括起來(lái),即<<<'EOT'。Heredoc結(jié)構(gòu)的所有規(guī)則也同樣適用于nowdoc結(jié)構(gòu),尤其是結(jié)束標(biāo)識(shí)符的規(guī)則。Note:不像heredoc結(jié)構(gòu),nowdoc結(jié)構(gòu)可以用在任意的靜態(tài)數(shù)據(jù)環(huán)境中,最典型的示例是用來(lái)初始化類的屬性或常量Nowdoc結(jié)構(gòu)是在PHP5.3.0中加入的.
String字符串的函數(shù)分類
在C語(yǔ)言中字符串是作為字節(jié)數(shù)組處理的。在Java語(yǔ)言中字符串是作為對(duì)象處理的。而php則把字符串作為基本數(shù)據(jù)類型來(lái)處理。通常對(duì)字符串的處理涉及字符串的格式化。字符串的分割和連接、字符串的比較、以及字符串的查找、匹配和替換等等。首先,字符串運(yùn)算符有兩個(gè)字符串(string)運(yùn)算符。第一個(gè)是連接運(yùn)算符(“.”),它返回其左右參數(shù)連接后的字符串。第二個(gè)是連接賦值運(yùn)算符(“.=”),它將右邊參數(shù)附加到左邊的參數(shù)之后。
注意:雙引號(hào)中的變量可以自動(dòng)轉(zhuǎn)換為對(duì)應(yīng)字符串值。String字符串常用函數(shù)舉例字符串定位
strpos—查找字符串首次出現(xiàn)的位置stripos()-查找字符串首次出現(xiàn)的位置(不區(qū)分大小寫(xiě))strrpos—計(jì)算指定字符串在目標(biāo)字符串中最后一次出現(xiàn)的位置strripos—計(jì)算指定字符串在目標(biāo)字符串中最后一次出現(xiàn)的位置(不區(qū)分大小寫(xiě))
strstr—查找字符串的首次出現(xiàn)
stristr—strstr函數(shù)的忽略大小寫(xiě)版本
String字符串常用函數(shù)舉例
字符串比較
strcmp
—二進(jìn)制安全字符串比較(二進(jìn)制比較,區(qū)分大小寫(xiě))strcasecmp()-二進(jìn)制安全比較字符串(二進(jìn)制比較,不區(qū)分大小寫(xiě))String字符串常用函數(shù)舉例字符串格式化
trim—去除字符串首尾處的空白字符(或者其他字符)
ltrim—?jiǎng)h除字符串開(kāi)頭的空白字符(或其他字符)
rtrim—?jiǎng)h除字符串末端的空白字符(或者其他字符)
strtolower—將字符串轉(zhuǎn)化為小寫(xiě)
strtoupper—將字符串轉(zhuǎn)化為大寫(xiě)
lcfirst—使一個(gè)字符串的第一個(gè)字符小寫(xiě)
ucfirst—將字符串的首字母轉(zhuǎn)換為大寫(xiě)
ucwords—將字符串中每個(gè)單詞的首字母轉(zhuǎn)換為大寫(xiě)String字符串常用函數(shù)舉例字符串輸入與輸出
vfprintf—將格式化字符串寫(xiě)入流
vprintf—輸出格式化字符串
vsprintf—返回格式化字符串
fprintf—將格式化后的字符串寫(xiě)入到流
print—輸出字符串
printf—輸出格式化字符串
echo—輸出一個(gè)或多個(gè)字符串
sscanf—根據(jù)指定格式解析輸入的字符String字符串常用函數(shù)舉例字符串加密
md5—計(jì)算字符串的MD5散列值
sha1—計(jì)算字符串的sha1散列值
String字符串常用函數(shù)舉例字符串與數(shù)組
str_s
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位人力資源管理制度精彩大全
- 醫(yī)療合作項(xiàng)目合同管理準(zhǔn)則
- 高層住宅外墻清洗項(xiàng)目招投標(biāo)
- 網(wǎng)絡(luò)營(yíng)銷企業(yè)薪酬管理
- 居民區(qū)通風(fēng)設(shè)備安裝合同
- 天津市養(yǎng)老社區(qū)物業(yè)醫(yī)療服務(wù)規(guī)范
- 紡織服裝弱電施工合同
- 廣東省廣州市天河區(qū)2023-2024學(xué)年高一上學(xué)期期末考試數(shù)學(xué)試卷(解析版)
- 羅定職業(yè)技術(shù)學(xué)院《田徑AⅡ》2023-2024學(xué)年第一學(xué)期期末試卷
- 酒店工程塔吊施工協(xié)議
- 國(guó)際金融課后習(xí)題答案(吳志明第五版)第1-9章
- 《WPS演示制作與設(shè)計(jì)》計(jì)算機(jī)應(yīng)用基礎(chǔ)高職??埔坏泉?jiǎng)(含課件制作試題及答案)
- 大英縣“互聯(lián)網(wǎng)+智慧教育”建設(shè)項(xiàng)目 ?招標(biāo)文件(采購(gòu))
- GB/T 7533-1993有機(jī)化工產(chǎn)品結(jié)晶點(diǎn)的測(cè)定方法
- GB/T 6728-2017結(jié)構(gòu)用冷彎空心型鋼
- 紅色喜慶新年快樂(lè)企業(yè)年會(huì)PPT
- 智慧港口信息化平臺(tái)建設(shè)方案
- 水土保持工程學(xué)課程設(shè)計(jì)
- 《牛常見(jiàn)病防治技術(shù)》課件
- 腰椎骨折的圍手術(shù)期護(hù)理詳解演示文稿
- 變壓器變比測(cè)試課件
評(píng)論
0/150
提交評(píng)論