日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

20100311 学习记录

發(fā)布時間:2025/3/17 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20100311 学习记录 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天發(fā)現(xiàn)詳細信息的頁面有字段顯示異常,地址信息全部丟失,last name則是丟失一半

經分析是url傳值時l遇到&導致信息錯誤,并連累了addr

于是查了一下特殊字符的處理方式

基本上是HTMLENCODE,URLEncode,?escape...幾種


其實也順便查了一下解碼方式,結果發(fā)現(xiàn)asp沒有自帶的解碼函數 - =

問題是我去Request.QueryString的時候居然也不需要解碼就可以得到正確的值。。。。囧

那個。。。為啥米捏~。。。。。 = =


具體細節(jié)摘錄于下

-------------------------------------------------------------------------------------------------

asp中特殊字符的解決方案?

?

特殊特殊字符的含義
字符 特殊字符的含義 URL編碼
# 用來標志特定的文檔位置 %23
% 對特殊字符進行編碼 %25
& 分隔不同的變量值對 %26
+ 在變量值中表示空格 %2B
\ 表示目錄路徑 %2F
= 用來連接鍵和值 %3D
? 表示查詢字符串的開始 %3F

  當鍵值中含有以上列表中的一些字符時就無法準確的接收其中的值。
<!--文件名為01.asp-->
<%
'定義含有特殊字符的字符串
str="parameter=#%&+\=?value</html>"
'用URLEncode方法進行編碼
strurlencode=server.URLEncode(str)
'用HTMLEncode方法進行編碼
strhtmlencode=server.HTMLEncode (str)
'顯示所有的querysting字符
Response.Write "<b>QueryString:<b>"
Response.Write Request.QueryString
'顯示傳遞的參數
Response.Write "<br><b>Parameter is:</b>" & str &"<br>"
Response.Write "<b>QueryParameter=</b>"
Response.Write Request.QueryString ("str")
%>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
</HEAD>
<BODY>

<P><a href="01.asp?str=<%=strurlencode%>">Str UrlEncode Method</a></P>
<P> </P>
<P><a href="01.asp?str=<%=strhtmlencode%>">Str HtmlEncode Method</a></P>
</BODY>
</HTML>

顯示結果
QueryString:
Parameter is:parameter=#%&+\=?value
QueryParameter=
Str UrlEncode Method
Str HtmlEncode Method

點擊連接1,結果
QueryString:str=parameter%3D%23%25%26%2B%5C%3D%3Fvalue%3C%2Fhtml%3E
Parameter is:parameter=#%&+\=?value
QueryParameter=parameter=#%&+\=?value
Str UrlEncode Method
Str HtmlEncode Method
此時我們發(fā)現(xiàn)好象參數值中的</html>沒有能正確接收到,當我們查看原代碼的時候就會發(fā)現(xiàn)其實已經準確的接收到了,原因是?/html>?#26159;標準html tag ,經過瀏覽器解釋后就不會顯示出來了。

點擊連接2,結果
QueryString:str=parameter=
Parameter is:parameter=#%&+\=?value
QueryParameter=parameter=
Str UrlEncode Method
Str HtmlEncode Method
此時就會發(fā)現(xiàn)在#后面沒有能正確接收到,而是被解釋為錨點的開始,在"#"后面的為錨的名稱。

  結論:在含有以上列表中具有特殊功能的特殊字符的字符串,作為參數用GET方式傳遞時,只需要用URLENCODE方法處理一下就可以拉。如果不想讓瀏覽者看到含后HTML TAG的字符串的具體值值是,我們可以用HTMLENCODE處理一下。

  PHP中用函數urlencode()就可以拉,這里就不在舉例了

----------------------------------------------------------------------------------------------------

地址欄(get方式)傳值不能不說的秘密-當傳遞的值中含某些特殊字符的情況

HTTP標準的兩種請求方式:Post和Get,關于這兩種請求方式的區(qū)別相關資料云集,這里不做闡述。然而,你是否注意到:
我們通過get方式從瀏覽器的地址欄傳遞數據給服務器,當參數的值中含有某些特殊轉義字符的時候,沒經過些許處理將得不到預期的結果。?

例如:
當我們的請求的url為:
http:
//localhost:8080/index.jsp?parameter=kalman03#kalman#1
或許你預期在服務器端獲得的parameter的結果為kalman03#kalman#1,錯!!!實際上得到parameter的值為kalman03。
這究竟是為什么呢?
原因:
parameter的值含有特殊字符#,瀏覽器自動截斷#字符和其后面的值,這樣得到的值就為kalman03。
推廣:
當參數值中含有特殊字符?
?!=()#%&?的時候,獲得的值同樣也會出現(xiàn)與預期結果不一致的情況。
解決方案:
方法1:通過post方式傳遞數據;
方法2:對參數進行一次編碼parameter
=escape(parameter);

第一種解決方案不解釋也能明白,現(xiàn)在解釋下第二種方法的處理:
JavaScript escape() 函數的功能是把其中某些字符替換成了十六進制的轉義序列。該方法不會對ASCII字母和數字進行編碼,也不會對下面這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( )。其他所有的字符都會被轉義序列替換。具體參考:http://www.w3school.com.cn/js/jsref_escape.asp.
這樣來就不會出現(xiàn)自動截斷或者其他意想不到的效果。


?

-------------------------------------------------------------------------------------------------

asp URLEncode

http://hi.baidu.com/xianshao129193/blog/item/fea9b101518828047aec2c67.html

URLEncode
URLEncode 方法將 URL 編碼規(guī)則,包括轉義字符,應用到指定的字符串。
語法
Server.URLEncode( string )
參數
String
指定要編碼的字符串。
示例
腳本
<%Response.Write(Server.URLEncode("http://www.microsoft.com")) %>
輸出
http%3A%2F%2Fwww%2Emicrosoft%2Ecom
應用于
Server 對象

我們這里試輸出一段字符:<%response.write Server.UrlEncode("中國貴陽")%>,頁面顯示結果為:%D6%D0%B9%FA%B9%F3%D1%F4,已成功編譯。

如果再對其進行反編譯處理呢?

'該函數轉自互聯(lián)網
function urldecode(encodestr)
newstr=""
havechar=false
lastchar=""
for i=1 to len(encodestr)
char_c=mid(encodestr,i,1)
if char_c="+" then
newstr=newstr & " "
elseif char_c="%" then
next_1_c=mid(encodestr,i+1,2)
next_1_num=cint("&H" & next_1_c)
if havechar then
havechar=false
newstr=newstr & chr(cint("&H" & lastchar & next_1_c))
else
if abs(next_1_num)<=127 then
newstr=newstr & chr(next_1_num)
else
havechar=true
lastchar=next_1_c
end if
end if
i=i+2
else
newstr=newstr & char_c
end if
next
urldecode=newstr
end function

最后輸出反編譯為:<%response.write UrlDecode("%D6%D0%B9%FA%B9%F3%D1%F4")%>

或者:<%response.write UrlDecode(Server.UrlEncode("中國貴陽"))%>

轉載于:https://www.cnblogs.com/neru/archive/2010/03/13/1684987.html

總結

以上是生活随笔為你收集整理的20100311 学习记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。