明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

使用Perl開發(fā)Internet/Intranet應(yīng)用之二(2)

[摘要]----2 強(qiáng)大的字串處理功能 ----在前面已提過perl具有非常強(qiáng)大的字串處理功能,它除了提供一些字符運(yùn)算比較符(eq,ne,le...)外,還提供了大量針對字符串匹配的參數(shù)。這是其它一些cgi編寫語言所不具有的。 ----我們經(jīng)常會遇到,傳遞的參數(shù)是中文信息,但接收到后卻都是亂碼。這是什么原...
----2 強(qiáng)大的字串處理功能

----在前面已提過perl具有非常強(qiáng)大的字串處理功能,它除了提供一些字符運(yùn)算比較符(eq,ne,le...)外,還提供了大量針對字符串匹配的參數(shù)。這是其它一些cgi編寫語言所不具有的。

----我們經(jīng)常會遇到,傳遞的參數(shù)是中文信息,但接收到后卻都是亂碼。這是什么原因呢?我們都知道,一個中文占用2個字節(jié),而一個英文字母只占用1個字節(jié),unicode編碼除外(unicode是Microsoft提出的標(biāo)準(zhǔn),采用16位同時對中英日韓等多國文字進(jìn)行編碼的機(jī)制)。server接收到參數(shù)信息后,會以字節(jié)為單位把每單位信息轉(zhuǎn)換為兩個十六進(jìn)制數(shù),這時候,中文的高字節(jié)會被轉(zhuǎn)換為"%**",而低字節(jié)也被轉(zhuǎn)換為"%**"。如果使用perl,該參數(shù)信息非常容易就能被還原出來。

...
$info=$ENV{'QUERY_STRING'};
#讀取參數(shù)信息到變量$info中
$info=~s/%([\dA-Fa-f][\dA-Fa-f])
/pack("c",hex($1))/eg;

----該語句的語法含義是:s是取代的意思;"/"中的內(nèi)容是要找的格式(“=~”是一些特殊字符,具體含義見表一);%([\dA-Fa-f][\dA-Fa-f])表示以%開始,后連續(xù)跟著兩個十六進(jìn)制數(shù)的字串(\dA是一些字符匹配格式,具體含義見表二),找到該字串后,系統(tǒng)把該值存放在$1中;pack("c",hex($1))表示把$1中的數(shù)轉(zhuǎn)換為真正的十六進(jìn)制字串;e表示把整個要替換的字串當(dāng)做表達(dá)式;g表示整個字串都要做相應(yīng)的查找替換。

----除了轉(zhuǎn)換中文參數(shù)外,我們還經(jīng)常要面對查找、替代諸如log文件、郵件等大量信息的困難;如果使用perl提供的一系列參數(shù),將省去很多不必要的麻煩。限于篇幅關(guān)系,下面僅列出一些常用的參數(shù)。

----表一:

=~尋找給定字串的特殊格式
m取消//內(nèi)“^”、“$”的特殊含義
i字串匹配時不考慮大小寫
x字串匹配時不考慮空格
s取代的意思

表二:
\w匹配一個文字或數(shù)字字符,包括“_”
\W匹配一個非文字/數(shù)字字符
\s匹配一個空白字符,包括“space”、“tab”鍵入的字符
\S匹配一個非空白字符
\d匹配一個數(shù)字字符
\D匹配一個非數(shù)字字符
\b匹配一個二進(jìn)制字符
\B匹配一個非二進(jìn)制字符
\A僅從字串開始進(jìn)行匹配
\Z僅從字串最后進(jìn)行匹配
\G表示m/結(jié)束