关闭

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

197人阅读 评论(0) 收藏 举报

 

 

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

}

}

 

 

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3305次
    • 积分:73
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章存档