WIN2000 IIS5下表单数据超过允许的极限的解决方案

by 清泉 11. 十一月 2008 09:55

        WIN2000 IIS5下碰到这个问题确实也比较头痛,特别是一些HTML编辑器,把WORD\EXCEL表格直接复制过去,就会发现一张简单的WORD\EXCEL表格,其实代码量是非常大的,几百K的代码很正常。
        经过测试在WIN2000 IIS5下一个textarea控件的长度不能超过100KB(一定要<100*1024 Bytes,正好等于这个长度也不行,另外像中文字符这样的双字节1个字符还是要算2Bytes的),一旦超过只要一Request.Form这个textarea就报80004005错误。据说IIS6(XP/2003)下这个就限制默认就要大得多,好象改也比较容易。好象IIS5下也有改注册表也可以改大,但是似乎微软也不是很确定,说是可能会引起系统崩溃,建议升级为IIS6。
        所以一般能做的是:1、升级IIS6;2、改注册表(比较不可靠)3、优化代码后粘进去再提交......
        很庆幸的IIS5并不是整个表单的数据加起来不能超过100KB,而是单单指一个textarea。这个可以拿Request.TotalBytes来测试一下,做3个textarea,每个里粘贴50KB的数据,然后提交,一切正常!更让人想不通的是如果3个textarea同名(name),如果用下标来访问Request.Form("textareaname")(1),只要这个成员不超过100KB,照样没问题。只是用Request.Form("textareaname")把所有成员结合起来读取就会报错了。真不知道微软在搞什么...
        就用以上分割表单的做法来写个实例大家做个参考吧!主要还是用到用Javascript把textarea分割,然后动态生成表单,再提交。

表单文件:form.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
<script language="javascript">
<!--
function submitform() {
var soccontent = document.form1.soccontent.value; //把原始表单的内容读出来
var partlen = 50*1024-1; //设置一个块的大小,考虑到中文是双字节,所以设置为50KB-1Byte
var parts; //这个是用来放算出来的块数的
var strDIV = document.all.hiddiv.innerHTML; //把原来隐藏的textarea读出来
//算出块数
if(soccontent.length % partlen > 0){
   parts = parseInt(soccontent.length / partlen) + 1;
}else{
   parts = parseInt(soccontent.length / partlen);
}
//动态生成隐藏的textarea
if(parts > 0){
   for(var i = 1; i <= parts; i++){
    strDIV = strDIV + "<textarea name=\"content\">" + soccontent.substring((i-1)*partlen, i*partlen) + "</textarea>";
   }
}
//把动态生成的textarea写入到页面里
document.all.hiddiv.innerHTML = strDIV;
//提交表单
document.form1.submit();
}
-->
</script>
</head>
<body>
<form id="form1" name="form1" method="post" action="test2.asp">
<!-- 用一个隐藏的DIV把真正的textarea隐藏起来 -->
<div id="hiddiv" style="display:none;"><textarea name="content"></textarea></div>
<!-- 这个是提交原始字符的textarea,里面可以放任意多的字符 -->
<textarea name="soccontent" cols="100%" rows="20"></textarea>
<br />
<!-- 用javascript的方式处理后提交表单 -->
<input type="button" value="提交" onclick="submitform();" />
</form>
</body>
</html>

处理表单的ASP:do.asp
<%
'这里只是简单地演示把textarea里内容输出到页面
'用循环的方式把表单中动态生成的textarea读出来,然后放到一个content变量里
For i = 1 To Request.Form("content").Count
content = content & Request.Form("content")(i)
Next
Response.Write(content)
%>

原先考虑过用<input type="hidden" name="content">来动态生成表单,但是万一碰到原始表单内有 " 或者换 行什么的这个表单的内容提交上去就会有问题了。差不多解决方案就是这样,不知道还有没有什么不足的地方,仅作参考用吧~~

Tags:

ASP技术资料

添加评论



(将显示你的Gravatar头像)  

biuquote
微笑得意调皮害羞酷大笑惊讶发呆喜欢可怜尴尬闭嘴噘嘴皱眉伤心抓狂呕吐坏笑漫骂发怒
Loading



Supidea.com 晨飞的梦 @ All Rights Reserved. Powered by BlogYi.NET ver:1.8.0.0. 苏ICP备09011404号

关于博主

kamau
抱着美好的理想背井离乡,这酸甜苦辣只能默默忍受。既然选择了路,就得风雨兼程……

Calendar

<<  二月 2012  >>
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

在日历中查看文章

最近的评论

Comment RSS

声明

      本博所发一切破解相关附件只作学习研究交流之用,严禁用于商业用途,请在下载24小时内删除。
      本博所有网友评论不代表本博立场,版权归其作者所有。

© Copyright 2009