DisplayTag的默認的URL為上一次的URL,而上一次的URL中包含被編碼后的漢字,所以,將編碼后的漢字再次進行編碼,肯定查不到結果,所以也不能翻頁,看來要修改DisplayTag了,本來想年后再弄的......
DisplayTag的默認的URL默認為上一次的URL,如果上一次的URL包含中文的話,則會被進行URLEncode,所以在翻頁的時候,又會把進行了URLEncode后的數據再次進行URLEncode,所以翻頁就沒有數據,因為這部分功能被封裝在DisplayTag中,于是,我又開始郁悶了......
如漢字"專業"被編碼后為"%D7%A8%D2%B5",于是DisplayTag就將這個編碼作為連接的關鍵字,如果再次提交,則這個編碼還會被編碼,所以查詢結果一定就不對了!!!
下面的內容是我分析這個問題的由來:
---------------------------------------------------------------------------------------------------
剛才到網上查找了些資料,找到HTML4.0.1的規范中關于URLEncode的部分,我把我關心的內容翻譯了一下:
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
其中相關內容如下在17.13.3 Processing form data:
提交時,HTML的規范處理如下:
1.標識successful controls (概念可以在上文中查找)。
2.構建form的數據集。
3.根據form的enctype的設置,對form的數據集進行Encode。
4.提交已經Encode的數據集。
HTML規范中指出Content type和Languange code是不區分大小寫的。
詳情參見:http://www.w3.org/TR/html401/types.html#type-content-type
"&" 表示"&"。關于charset的詳細內容見:http://www.w3.org/TR/html401/charset.html#entities
有一個小發現:Frame中的target的值的列表原來是在HTML的規范中制定的,呵呵:
下面的target的名字是規范中聲明的有特殊含義的保留字。
_blank 在一個沒有指定名字的新窗口中打開頁面。(new, unnamed window)
_self 在同一個窗口中打開。(load the document in the same frame as the element that refers to this target)
_parent 在當前窗口的父窗口中打開,如果當前窗口沒有父窗口,那么就等同于_self
_top 在最開始的窗口中轉載,如果當前框架沒有parent,那就等于_self。
form的默認的content type是:application/x-www-form-urlencoded
form提交content type的數據必須用下列規則進行編碼(encode):
空格被封裝為"+",其他的保留字封裝后的值在 [RFC1738]中可以查到。RF1738的規范:http://www.ietf.org/rfc/rfc1738.txt。
其他的非英文字符和非數字的字符都被編碼為"%HH",
HH是將字符的ASCII的編碼轉換為16進制后的字符。行尾是"CR LF" (如:`%0D%0A')。
控件的名字和數值之間使用"="分隔,多個控件之間用"&"分隔。
------------------------------------------------------------------------------------------------------------------
兔八哥
2005-2-2下午
|