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)函數(shù)去掉一些數(shù)據(jù)的開頭和結尾的空格,筆者最近寫了一個asp聊天室,有下面的一段代碼: % dim name,title name=trim(request.form("name")) password=trim(request.form("password")) if name=""or password="" then response.redirect "error.asp?error=namename=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函數(shù)來去掉開頭和結尾的空格,在一般的情況下,這段程序執(zhí)行的很正常,但是后來筆者竟然發(fā)現(xiàn)有人竟然可以使用空格進來,意思就是說,該用戶的name完全為空格,但是筆者嘗試自己使用空格卻無論都不能通過(即被程序監(jiān)測了出來),開頭和結尾的空格都被trim函數(shù)給去掉了,即使中間有空格,筆者需要的話也可以使用一個函數(shù)把中間的空格給去掉,由于筆者使用的是sql數(shù)據(jù)庫記錄下的用戶資料,于是筆者懷疑他使用了其它什么的東西讓系統(tǒng)看不到,于是去察看紀錄用戶資料的sql數(shù)據(jù)庫(筆者曾經使用這種方法看到了帶換行符的用戶),但是筆者仍然看到數(shù)據(jù)庫中的改用戶的資料也是空格,這難道說該用戶使用了一種手段可以繞過我的用戶名和密碼監(jiān)測嗎???實在找不到程序上的漏洞,于是只能向這位用戶請教,幸運的是這位用戶爽快的告訴了筆者,原來是"Alt+255",按住alt鍵然后依次按下小鍵盤中"2","5","5"就會產生一個比較特殊的東西"空格"字符(這個概念筆者也不是比較清楚,這是一種控制字符,在一些編輯器中可以看到word2000,應該還有其他的控制字符),這個空格字符不同于傳統(tǒng)的按下空格鍵產生的字符,它的asc代碼是255,而傳統(tǒng)的space鍵入的空格的asc代碼是32,trim函數(shù)只能認識asc代碼為32的代碼并去除,所以出現(xiàn)了出現(xiàn)空格用戶的情況!針對這種情況筆者設計了下面的兩種函數(shù)去掉這"空格"字符: 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程序中使用這個函數(shù),比如: name=xuankong(trim(request.form("name"))) 因為字符0-z asc代碼的數(shù)值為 48-122 這一個區(qū)段 ,所以可以使用如下的方法監(jiān)測: 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
雖然這種“空格”暫時沒有發(fā)現(xiàn)會破壞程序的問題,但是卻是可以讓人搗亂的,還是防了的好,不過這種空格也有一種好處,如果作為你得上網密碼的話,嘿嘿… …恐怕沒有幾個人能看到吧!看到的都是以為是space,但是卻不是… … 筆者不熟悉php和jsp所以不知道在這兩種東西中是否會存在這種問題 neweguo 2006-1-12 01:55 AM 如何讀出空格 如何讀出空格 我們在網頁中經常要動態(tài)顯示從文件中取出來的內容,假如你編寫了一個聊天室或論壇之類的程序,每一位發(fā)表言論者的內容都要先存在文本文件中,然后再顯示在網頁上。但是我們在網頁上讓用戶輸入內容的控件是文本框。那么文本框中的內容顯示在網頁上時不能把類似空格、換行的字符顯示出來,也就是說沒有段落。要想在網頁上顯示段落,必須在我們輸入文本的空格、換行字符處插入HTML標志才能把這些字符顯示出來,請看下面的例子。 假如在網頁上是一個聊天室畫面,我們在文本框中輸入內容后,點擊“提交”就可在頁面上把我們的內容顯示出來,文本框名為Text1 ,我們用下面的方法就可以很巧妙地實現(xiàn)顯示文本換行和空格的功能。 % ...... ...... str=request.querystring("text1") str=Replace(str, Chr(32), "nbsp") '把空格換成nbsp標志 str=Replace(str, vbCrLf, "br>") '把回車換行符換成br>標志 Response.write str ...... ...... %> 經過上面的代碼后,我們就把文本中的回車換行符變?yōu)闉g覽器所能識別的br>換行標,而把空格換為nbsp空格標志。其中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> /** * 一個增強版的文章段落格式化函數(shù) * 使用)nbsp;替換TAB,支持多系統(tǒng) * Rewrite and multiOS support by Nathan Dintenfas. * * @param string The string to format. (Required) * @return Returns a string. * @author Ben Forta ([email]ben@forta.com[/email]) * @version 3, June 26, 2002 */ 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),"nbsp;nbsp;nbsp;","ALL"); //now return the text formatted in HTML return replace(str,chr(10),"br />","ALL"); } /cfscript>