前些天在做项目时遇到一个很大的困难,就是在javascript中动态创建一个链接,链接到服务器上的某个附件,点击它就可以查看或是下载。代码我都已经写好如下:
function createHref(pathname){
var newHref=document.createElement("a");
newHref.href="OneDownloadServlet?pathname="+ pathname;
}
页面中将服务器上链接到该附件的绝对地址作为参数pathname的值传递给createHref(pathname)函数,可是页面在加载时总是无法将pathname传递给该函数,调试时IE报”缺少十六进制数字”这样的错误,实在是看不懂什么意思,于是上网百度,果然有很多人都遇到了这样的问题.原来是javascript在提交数据时若遇到”/”会把它当做javascript的特殊字符对待(相当于关键字),从而打乱了javascript代码,导致错误.而我的pathname由于是绝对地址,包含了很多个”/”,所以报错。解决办法是将”/”替换成”//”即可!网上有一个通用的转码组件,不仅可以转换javascript的,还可以转换html,xml等的特殊字符,许多帖子都转载了它。但是我对它进行了测试,发现有很多错误,或者是函数过期,或者是替换字符串写错,还有对javascript的转换函数中缺少对”/”的转换.于是对其进行了修正,然后测试就成功了!比如我上面的例子,若使用该组件的话只需要: pathname= CommStr.jsEncoder(pathname)即可!现在把这个组件贴出来,给大家参考,如还有错误,欢迎指正!
public class CommStr {
/**
*replace the old string to new string in the given destination string.
*/
public static java.lang.String strReplace(java.lang.String destStr,
java.lang.String oldStr, java.lang.String newStr) {
if (destStr == null)
return "";
String tmpStr = destStr;
int foundPos = tmpStr.indexOf(oldStr);
while (foundPos >= 0) {
tmpStr = tmpStr.substring(0, foundPos)
+ newStr
+ tmpStr.substring(foundPos + oldStr.length(), tmpStr
.length());
foundPos = tmpStr.indexOf(oldStr, foundPos + newStr.length());
}
return tmpStr;
}
/**
*Encode for HTML.
*/
public static String htmlEncoder(String str) {
if (str == null || str.equals(""))
return "";
String res_str;
res_str = strReplace(str, "&", "&");
res_str = strReplace(res_str, " ", " ");
res_str = strReplace(res_str, "<", "<");
res_str = strReplace(res_str, ">", "&rt;");
res_str = strReplace(res_str, "/"", """);
res_str = strReplace(res_str, "'", "'");
return res_str;
}
/**
*Encode for HTML-Text.
*/
public static String htmlTextEncoder(String str) {
if (str == null || str.equals(""))
return "";
String res_str;
res_str = strReplace(str, "&", "&");
res_str = strReplace(res_str, "<", "<");
res_str = strReplace(res_str, ">", "&rt;");
res_str = strReplace(res_str, "/"", """);
res_str = strReplace(res_str, "'", "'");
res_str = strReplace(res_str, " ", " ");
res_str = strReplace(res_str, "/r/n", "<br>");
res_str = strReplace(res_str, "/r", "<br>");
res_str = strReplace(res_str, "/n", "<br>");
return res_str;
}
/**
*Encode for URL.
*/
public static String urlEncoder(String str) {
try {
str = java.net.URLEncoder.encode(str, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
/**
*Encode for XML.
*/
public static String xmlEncoder(String str) {
if (str == null || str.equals(""))
return "";
String res_str;
res_str = strReplace(str, "&", "&");
res_str = strReplace(res_str, "<", "<");
res_str = strReplace(res_str, ">", ">");
res_str = strReplace(res_str, "/"", """);
res_str = strReplace(res_str, "/'", "´");
return res_str;
}
/**
*Encode for SQL.
*/
public static String sqlEncoder(String str) {
if (str == null || str.equals(""))
return "";
String res_str;
res_str = strReplace(str, "'", "''");
return res_str;
}
/**
*Encode for Javascript.
*/
public static String jsEncoder(String str) {
if (str == null || str.equals(""))
return "";
String res_str;
res_str = strReplace(str, "//", ""); //将/替换成//
res_str = strReplace(res_str, "'", "//'"); //将'替换成/'
res_str = strReplace(res_str, "/"", "///"");//将"替换成/"
res_str = strReplace(res_str, "/r/n", "///n");//将/r/n替换成//n
res_str = strReplace(res_str, "/n", "///n");//将/n替换成//n
res_str = strReplace(res_str, "/r", "///n");//将/r替换成//n
return res_str;
}
}