字符串内特殊字符在html_javascript_xml等内使用时的转换 ,"缺少十六进制数字"错误的处理

 

 

前些天在做项目时遇到一个很大的困难,就是在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, "<", "&lt;");

res_str = strReplace(res_str, ">", "&rt;");

res_str = strReplace(res_str, "/"", "&quot;");

res_str = strReplace(res_str, "'", "&#039;");

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, "&", "&amp;");

res_str = strReplace(res_str, "<", "&lt;");

res_str = strReplace(res_str, ">", "&rt;");

res_str = strReplace(res_str, "/"", "&quot;");

res_str = strReplace(res_str, "'", "&#039;");

res_str = strReplace(res_str, " ", "&nbsp;");

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, "&", "&amp;");

res_str = strReplace(res_str, "<", "&lt;");

res_str = strReplace(res_str, ">", "&gt;");

res_str = strReplace(res_str, "/"", "&quot;");

res_str = strReplace(res_str, "/'", "&acute;");

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;

}

}

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值