使用Perl開發Internet/Intranet應用之二(2)
發表時間:2024-02-10 來源:明輝站整理相關軟件相關文章人氣:
[摘要]----2 強大的字串處理功能 ----在前面已提過perl具有非常強大的字串處理功能,它除了提供一些字符運算比較符(eq,ne,le...)外,還提供了大量針對字符串匹配的參數。這是其它一些cgi編寫語言所不具有的。 ----我們經常會遇到,傳遞的參數是中文信息,但接收到后卻都是亂碼。這是什么原...
----
2 強大的字串處理功能 ----在前面已提過perl具有非常強大的字串處理功能,它除了提供一些字符運算比較符(eq,ne,le...)外,還提供了大量針對字符串匹配的參數。這是其它一些cgi編寫語言所不具有的。
----我們經常會遇到,傳遞的參數是中文信息,但接收到后卻都是亂碼。這是什么原因呢?我們都知道,一個中文占用2個字節,而一個英文字母只占用1個字節,unicode編碼除外(unicode是Microsoft提出的標準,采用16位同時對中英日韓等多國文字進行編碼的機制)。server接收到參數信息后,會以字節為單位把每單位信息轉換為兩個十六進制數,這時候,中文的高字節會被轉換為"%**",而低字節也被轉換為"%**"。如果使用perl,該參數信息非常容易就能被還原出來。
...
$info=$ENV{'QUERY_STRING'};
#讀取參數信息到變量$info中
$info=~s/%([\dA-Fa-f][\dA-Fa-f])
/pack("c",hex($1))/eg;
----該語句的語法含義是:s是取代的意思;"/"中的內容是要找的格式(“=~”是一些特殊字符,具體含義見表一);%([\dA-Fa-f][\dA-Fa-f])表示以%開始,后連續跟著兩個十六進制數的字串(\dA是一些字符匹配格式,具體含義見表二),找到該字串后,系統把該值存放在$1中;pack("c",hex($1))表示把$1中的數轉換為真正的十六進制字串;e表示把整個要替換的字串當做表達式;g表示整個字串都要做相應的查找替換。
----除了轉換中文參數外,我們還經常要面對查找、替代諸如log文件、郵件等大量信息的困難;如果使用perl提供的一系列參數,將省去很多不必要的麻煩。限于篇幅關系,下面僅列出一些常用的參數。
----表一:
=~尋找給定字串的特殊格式
m取消//內“^”、“$”的特殊含義
i字串匹配時不考慮大小寫
x字串匹配時不考慮空格
s取代的意思
表二:
\w匹配一個文字或數字字符,包括“_”
\W匹配一個非文字/數字字符
\s匹配一個空白字符,包括“space”、“tab”鍵入的字符
\S匹配一個非空白字符
\d匹配一個數字字符
\D匹配一個非數字字符
\b匹配一個二進制字符
\B匹配一個非二進制字符
\A僅從字串開始進行匹配
\Z僅從字串最后進行匹配
\G表示m/結束