今天调试个网页遇到很棘手的问题:用XMLHttpRequest POST一个特定的字符串居然501了!
详情:
var xmlHttpReq;//创建好的XMLHttpRequest对象
var phpfile=;//目标接收post的php文件uri
var content=encodeURIComponent(';中文字符串cc另一个中文字符串ls');//古怪的地方,就是这个字符串!!
var param="content="+content;
xmlHttpReq.open("POST",phpfile,false);
xmlHttpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttpReq.onreadystatechange=function(){if(xmlHttpReq.readyState==4){alert(xmlHttpReq.responseText);}};
xmlHttpReq.send(param);
上述代码执行后直接501,中文字符串指不含英文26个大小写字母的字符串1) '古怪字符串'中的 `中文字符串`删除掉(即变成`;cc.ls`)也一样error.
2) 将`中文字符串`或`另一个中文字符串`变成含>=1个英文字母,501错误消失.
3) `cc.ls`无大小写区别,即改下其中几个字符的大小写一样501.
4) `cc.ls`改成其他的字符串(例如`ccls`或`cw.ls`或`dd.ls`等等),错误消失!
5) 另一个很古怪关键的地方是这个分好(`;`),没有这个`;`,错误也消失了!好郁闷...
大家瞧瞧试试,知道内幕的达人帮解惑...

解决方案 »

  1.   

    最新测试修正:
    `另一个中文字符串`这个地方改为含英文26个字符也一样错误.
    合并cc与ls才错误消失.
      

  2.   

    关于这个问题我想只能自定义自己的encodeURI函数,
    防止服务器解析成原字符串,这样便安全了.
    我写了个将javascript的unicode字符串encode成带utf8编码的自定义编码协议的
    函数,这样服务器的.php只要hexdec简单转换下既得utf8格式的字符串,
    多了一点encode来decode去的代码,哎,,,,
      

  3.   

    在利用浏览器的form提交(POST)的前提下:
    有没有方法既设置某个表单域的name属性,
    又不让表单提交这个域 ?不如说在<form>中: <input name='demoname' type='text' ... />如何屏蔽这个域?