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

原创 2011年01月13日 16:01:00

 

 

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

}

}

 

 

 

 

javascript 错误“缺少十六进制数字”的处理

问题:我是打算使用上面的语句把数据库的连接字符串写入上一级网页的connstr文本框中,但是在执行时ie总报告“缺少十六进制数字”。代码如下:a="Provider=Microsoft.Jet.OLE...
  • zhichao2001
  • zhichao2001
  • 2007年11月14日 10:22
  • 6397

上传文件时候报错: 缺少十六进制数字

1、上次报这个错误, 是因为tomcat目录下面的temp文件夹被误删 2、这一次比较诡异, 开始以为是文件名, 改名字后依旧, 但是文件复制到一台win8机器上, window的data ...
  • jgwei
  • jgwei
  • 2012年07月03日 11:29
  • 739

SQL 脚本中的全角逗号引起【ORA-01756: 引号内的字符串没有正确结束】

今天运行壹個小程序,功能是读取指定目录下的 SQL 脚本,并加载到内存中批量执行,之前的程序运行良好。但是今天相关开发人员更新了其中壹個 SQL 脚本,于是程序运行的时候就出错了,错误提示信息如下:批...
  • han_miao
  • han_miao
  • 2014年02月18日 11:59
  • 4362

前端jsp中处理特殊字符方法总结

前段时间修改一个前端jsp页面的,测试组发现一个问题可让我纠结很久了,现在终于解决了来总结一下,下次就方便了。   问题: jsp页面输入框中输入了类似 alert("测试脚本") 这样的恶意脚...
  • u010402228
  • u010402228
  • 2015年12月03日 08:47
  • 1710

mybatis xml中特殊字符处理

mybatis xml中特殊字符处理
  • hbtj_1216
  • hbtj_1216
  • 2016年06月26日 16:15
  • 8767

在函数内不正确地使用了 'getdate'。

用户定义函数中不允许使用以下内置函数: @@CONNECTIONS @@PACK_SENT GETDATE  @@CPU_BUSY  @@PACKET_ERRORS  GetUTCDate(...
  • ice_baili
  • ice_baili
  • 2017年12月20日 09:58
  • 58

服务器无法处理请求。 ---> 索引和长度必须引用该字符串内的位置。 参数名: length

?? 字符串长度 超过范围??
  • dingxingmei
  • dingxingmei
  • 2014年04月14日 10:12
  • 968

xstream解析xml时遇到特殊字符出错

在xml中有“&”符号时,解析xml出错 解决办法: 将&替换成&
  • Yan456jie
  • Yan456jie
  • 2015年06月09日 22:49
  • 927

x264:common/opencl.c:154:19: 错误:‘x264_opencl_source_hash’未声明

错误信息: common/opencl.c: 在函数‘x264_opencl_cache_load’中: common/opencl.c:154:19: 错误:‘x264_opencl_source...
  • u010811257
  • u010811257
  • 2014年11月03日 11:10
  • 1209

oracle error 引号内的字符串没有正确结束

ERROR: ORA-01756: 引号内的字符串没有正确结束  SELECT DISTINCT A.JNO FROM Rt AS A WHERE NOT EXISTS (SELECT P...
  • qq_20480611
  • qq_20480611
  • 2015年05月31日 22:35
  • 2314
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串内特殊字符在html_javascript_xml等内使用时的转换 ,"缺少十六进制数字"错误的处理
举报原因:
原因补充:

(最多只允许输入30个字)