天天看點

chr(9)、chr(10)、chr(13)、chr(32)、chr(34)講解 詳細出處參考:http://www.jb51.net/article/8656.htm

chr(9)、chr(10)、chr(13)、chr(32)、chr(34)

所有關于 ASCII碼的表格:[url]http://www.asciitable.com/[/url]

chr(13) 是一個回車

Chr(10) 是個換行符

chr(32) 是一個空格符

9\34 是tab,未确定?

以下是一些示列 

特殊的空格字元 

在asp程式設計中,我們常常使用trim(rtrim,ltrim)函數去掉一些資料的開頭和結尾的空格,筆者最近寫了一個asp聊天室,有下面的一段代碼:  

<% dim name,title  

name=trim(request.form("name"))  

password=trim(request.form("password"))  

if name=""or password="" then response.redirect "error.asp?error=name&name=null"   

myDSN="DSN=test;uid=test;pwd=test"  

set cn=server.createobject("adodb.connection")  

cn.open myDSN  

sql="insert into test(name,title) values('"&name&"','"&password&"')"  

cn.execute(sql)  

cn.close%>  

筆者使用了trim函數來去掉開頭和結尾的空格,在一般的情況下,這段程式執行的很正常,但是後來筆者竟然發現有人竟然可以使用空格進來,意思就是說,該使用者的name完全為空格,但是筆者嘗試自己使用空格卻無論都不能通過(即被程式監測了出來),開頭和結尾的空格都被trim函數給去掉了,即使中間有空格,筆者需要的話也可以使用一個函數把中間的空格給去掉,由于筆者使用的是sql資料庫記錄下的使用者資料,于是筆者懷疑他使用了其它什麼的東西讓系統看不到,于是去察看紀錄使用者資料的sql資料庫(筆者曾經使用這種方法看到了帶換行符的使用者),但是筆者仍然看到資料庫中的改使用者的資料也是空格,這難道說該使用者使用了一種手段可以繞過我的使用者名和密碼監測嗎???實在找不到程式上的漏洞,于是隻能向這位使用者請教,幸運的是這位使用者爽快的告訴了筆者,原來是"Alt+255",按住alt鍵然後依次按下小鍵盤中"2","5","5"就會産生一個比較特殊的東西"空格"字元(這個概念筆者也不是比較清楚,這是一種控制字元,在一些編輯器中可以看到word2000,應該還有其他的控制字元),這個空格字元不同于傳統的按下空格鍵産生的字元,它的asc代碼是255,而傳統的space鍵入的空格的asc代碼是32,trim函數隻能認識asc代碼為32的代碼并去除,是以出現了出現空格使用者的情況!針對這種情況筆者設計了下面的兩種函數去掉這"空格"字元:

function xuankong(str)  

dim result  

dim j  

   j=len(str)  

   result=""  

dim i   

for i = 1 to j  

   select case mid(str,i,1)  

       case "<"  

          result=result+"<"  

       case ">"  

          result=result+">"  

       case chr(34)    

          result=result+"""  

       case "&"  

          result=result+"&"  '以上代碼轉換一些html标記  

       case chr(255) '防止特殊空格  

          result=result  

       case chr(13) '防止回車符  

          result=result+""  

       case chr(10) '防止換行符  

          result=result+""  

       case else  

          result=result+mid(str,i,1)  

  end select  

next   

xuankong=result  

end function  

然後在你的asp程式中使用這個函數,比如:  

name=xuankong(trim(request.form("name")))  

因為字元0-z asc代碼的數值為 48-122 這一個區段 ,是以可以使用如下的方法監測: 

dim j  

j=len(trim(request.form("name")))  

for i= 1 to  j  

if  asc(mid(name,i,1))>122 or asc(mid(name,i,1))<48 then response..redirect"error.asp?

error=special"  

next

  

雖然這種“空格”暫時沒有發現會破壞程式的問題,但是卻是可以讓人搗亂的,還是防了的好,不過這種空格也有一種好處,如果作為你得上網密碼的話,嘿嘿… …恐怕沒有幾個人能看到吧!看到的都是以為是space,但是卻不是… … 筆者不熟悉php和jsp是以不知道在這兩種東西中是否會存在這種問題 

neweguo 2006-1-12 01:55 AM 

如何讀出空格

如何讀出空格

我們在網頁中經常要動态顯示從檔案中取出來的内容,假如你編寫了一個聊天室或論壇之類的程式,每一位發表言論者的内容都要先存在文本檔案中,然後再顯示在網頁上。但是我們在網頁上讓使用者輸入内容的控件是文本框。那麼文本框中的内容顯示在網頁上時不能把類似空格、換行的字元顯示出來,也就是說沒有段落。要想在網頁上顯示段落,必須在我們輸入文本的空格、換行字元處插入HTML标志才能把這些字元顯示出來,請看下面的例子。

假如在網頁上是一個聊天室畫面,我們在文本框中輸入内容後,點選“送出”就可在頁面上把我們的内容顯示出來,文本框名為Text1 ,我們用下面的方法就可以很巧妙地實作顯示文本換行和空格的功能。

<%

......

......

str=request.querystring("text1")

str=Replace(str, Chr(32), " ")

'把空格換成 标志

str=Replace(str, vbCrLf, "<br>")

'把回車換行符換成<br>标志

Response.write str

......

......

%>

經過上面的代碼後,我們就把文本中的回車換行符變為浏覽器所能識别的<br>換行标,而把空格換為 空格标志。其中Chr(32)表示空格,vbCrLf表示回車換行。 

neweguo 2006-1-12 01:55 AM 

chr(13) 是一個回車

(

例子:把所有回車符替換為<br/>

#Replace(foo, Chr(13), "<br />", "ALL")#

)

Chr(10) 是個換行符

所有關于 ASCII碼的表格:[url]http://www.asciitable.com./[/url]

<cfscript>

function Paragrap1hFormat2(str) {

//first make Windows style into Unix style

str = replace(str,chr(13)&chr(10),chr(10),"ALL");

//now make Macintosh style into Unix style

str = replace(str,chr(13),chr(10),"ALL");

//now fix tabs

str = replace(str,chr(9)," ","ALL");

//now return the text formatted in HTML

return replace(str,chr(10),"<br />","ALL");

}

</cfscript> 

詳細出處參考:http://www.jb51.net/article/8656.htm