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下午
|