字符串内特殊字符在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(js)进行HTML转义工具(处理特殊字符显示)

众所周知页面上的字符内容通常都需要进行HTML转义才能正确显示,尤其对于Input,Textarea提交的内容,更是要进行转义以防止javascript注入攻击。   通常的HTML转义主要是针...
  • hj7jay
  • hj7jay
  • 2016-04-29 11:20
  • 7505

HTML字符实体(CharacterEntities),转义字符串(Escape Sequence),web.config中使用特殊字符

字符 转义码 & 符号   & &amp; 单引号  ' &apos; 双引号  " &quot;....

javascript的转换特殊字符为HTML实体字符

首先来复习一下:RegExp对象和字符串的模式匹配的区别 RegExp与String的模式匹配的区别: var text = “cat, bat, sat, fat”; var pattern ...
  • lonpo
  • lonpo
  • 2011-12-03 14:10
  • 3770

Java随机生成长度不少于6的指定长度的密码,且这个字符串必须包含大小写字母、数字和特殊字符,四种的任意三种

Java随机生成长度不少于6的指定长度的密码,且这个字符串必须包含大小写字母、数字和特殊字符,四种的任意三种 入参为指定的长度,出参为随机生成的密码 JAVA代码 RandomPassword.j...
  • lzxomg
  • lzxomg
  • 2016-08-22 01:36
  • 3105

用javascript判断日期、数字、整数和特殊字符 -1

用JavaScript判断日期、数字、整数和特殊字符 /** * 取得字符串的字节长度 */ 代码 function strlen(str)   {       var ...

Servlet过滤字符串的HTML特殊字符

(1)在一些情况下我们在用户输入数据的时候我们要判断一下是否合法,就是要过滤一下用户输入的信息是否含有特殊字符; (2)直接上代码,以供大家参考学习: ServletUtilities类: ...

ibatis 动态列缓存问题;oracle行转列;oracle使用数字或特殊字符作列的别名

1、iBatis会自动缓存每条查询语句的列名映射,所有如果你动态生成列名的话就有可能造成查询列名无效的问题。 ibaits 会缓存查询的meta信息,在生成动态列时一定要加上 remapResu...

特殊字符导致json字符串转换成json对象出错

在对数据库取出来的数据(特别是描述信息)里面含有特殊字符的话,使用JSON.parse将json字符串转换成json对象的时候会出错,主要是双引号,回车换行等影响明显,左尖括号和右尖括号也会导致显示问...

XML 特殊字符处理和 CDATA

所有 XML 文档中的文本均会被解析器解析。 只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。 PCDATA PCDATA 指的是被解析的字符数据...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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