字符串内特殊字符在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;

}

}

 

 

 

 

html xml 转义符号 java 转换 HTML 字符 java 特殊字符转义字符串

为什么要用转义字符串? HTML中,&等有特殊含义(,用于链接签,&用于转义),不能直接使用。这些符号是不显示在我们最终看到的网页里的,那如果我们希望在网页中显示这些符号,该怎么办呢? 这就要说到...
  • joyous
  • joyous
  • 2017年11月10日 23:18
  • 105

用Javascript(js)进行HTML转义工具(处理特殊字符显示)

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

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

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

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

字符 转义码 & 符号   & & 单引号  ' ' 双引号  " "...

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

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

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

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

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

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

应用打包: 工程名字包含特殊字符时出现的错误及解决方法

应用打包: 工程名字包含特殊字符时出现的错误及解决方法  一、打包时,如果出现这个错误, 首先检查工程名字后面是否包含[ ] { } ( ) . +等特殊字符。  二、 项目的重命名方...
  • fengmio
  • fengmio
  • 2015年10月06日 18:18
  • 158
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串内特殊字符在html_javascript_xml等内使用时的转换 ,"缺少十六进制数字"错误的处理
举报原因:
原因补充:

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