// 첨부파일명 체크
    if ( val.indexOf("&") > 0 || val.indexOf("%") > 0)
    {
        alert("첨부화일명에 & 혹은 % 문자는 입력하시면 안됩니다\n화일명을 수정해 주세요.");
     var idx = obj.name.substring('file'.length);
    // obj.style.display = 'none';     add_item2(++idx, val, 'Y', 'N', attachCnt);
        return;
    }这段代码是判断上传文件的文件名是否带有 & 或者 % 符号。现象:
  A.当上传文件名中带有“&”符号的文件时:
    1.弹出提示。
    2.点击保存后刷新页面,带有“&”符号的文件不会被存到数据库。
  B.当上传文件名中带有“%”符号的文件时:
    1.弹出提示。
    2.点击保存后刷新页面,带有“%”符号的文件被存到数据库。为什么结果会有这样的差异?% 符号在JS里有特殊含义? 就算有,在判断里已经将他视为字符了啊,和 & 符号应该没区别吧。

解决方案 »

  1.   

    indexof是查找字符? 不知道indexof('') 和indexof("")有撒区别
      

  2.   

    用这个转码试试 encodeURI() 
      

  3.   

    如果你用的是 MultipartRequest 控件
    有个方法是 上传之前把%改成别的字符再上传。肯定有如下代码:new MultipartRequest(request,saveDir,maxSize,char_encoding,new DefaultFileRenamePolicy() );
    你可以继承DefaultFileRenamePolicy 类 并重写rename方法public class MyFileRenamePolicy extends DefaultFileRenamePolicy
    {
    public File rename(File f) {
    //return super.rename(f);
    return super.rename(new File(f.getParent(), f.getName().replace('%', 'P')));
    }
    };
    然后把上面的调用改成:new MultipartRequest(request,saveDir,maxSize,char_encoding,new MyFileRenamePolicy() );