解决方案: 自定义标签将字符串转换成unicode编码后输出显示到页面即可

解析原理:解析顺序html  ---url ----javascript---url,由于unicode编码在htm解析阶段
不被解析保留原来文本格式,在javascript触发时才解析。
因此要让页面不报错,文本保留原格式,采用unicode转换即可。

以单引号为例,单引号表达方式有以下几种
'    "    \u0027    '
查看document树发现只有\u0027保持原来的文本格式。浏览器便不会报错,这是我们想要的。
而且在js调用时,会将unicode转换回原本格式,提交到后台。
原内容    unicode编码格式
'             \u0027
"    \u0026\u0071\u0075\u006f\u0074\u003b

\u0027   \u005c\u0075\u0030\u0030\u0032\u0037

'     \u0026\u0023\u0033\u0039\u003b

流程:
自定义标签将原格式转换成unicode显示到页面
js将unicode转换成原格式提交到后台
后台用原格式参数去查询 

 
unicode编码简而言之就是将每一个字符用16位2进制数标识。但是通常都用4位的16进制数标识。 
例如: 
1)中文字符串"你好"的unicode码为:\u60\u597d; 
2)英文字符串"ab"的unicode码为:\u0061\u0062; 
其中\u是标识unicode码用的,后面的4位16进制数则是对应字符的unicode码。

unicode码在J2EE项目中应用广泛,java对unicode码提供了很好的支持。例如国际化,则是unicode的经典运用。 
那么unicode的编码规则具体是什么,如何用程序实现?

1、unicode编码规则

unicode码对每一个字符用4位16进制数表示。具体规则是:将一个字符(char)的高8位与低8位分别取出,转化为16进制数, 
   如果转化的16进制数的长度不足2位,则在其后补0,然后将高、低8位转成的16进制字符串拼接起来并在前面补上"\u" 即可。 
   
2、转码程序

1)字符串转unicode

/** 
* 将字符串转成unicode 
* @param str 待转字符串 
* @return unicode字符串 
*/ 
public String convert(String str) 

str = (str == null ? "" : str); 
String tmp; 
StringBuffer sb = new StringBuffer(1000); 
char c; 
int i, j; 
sb.setLength(0); 
for (i = 0; i < str.length(); i++) 

c = str.charAt(i); 
sb.append("\\u"); 
j = (c >>>8); //取出高8位 
tmp = Integer.toHexString(j); 
if (tmp.length() == 1) 
sb.append("0"); 
sb.append(tmp); 
j = (c & 0xFF); //取出低8位 
tmp = Integer.toHexString(j); 
if (tmp.length() == 1) 
sb.append("0"); 
sb.append(tmp);


return (new String(sb)); 
}

2)unicode转成字符串,与上述过程反向操作即可 
/** 
* 将unicode 字符串 
* @param str 待转字符串 
* @return 普通字符串 
*/ 
public String revert(String str) 

str = (str == null ? "" : str); 
if (str.indexOf("\\u") == -1)//如果不是unicode码则原样返回 
return str;

StringBuffer sb = new StringBuffer(1000);

for (int i = 0; i < str.length() - 6;) 

String strTemp = str.substring(i, i + 6); 
String value = strTemp.substring(2); 
int c = 0; 
for (int j = 0; j < value.length(); j++) 

char tempChar = value.charAt(j); 
int t = 0; 
switch (tempChar) 

case 'a': 
t = 10; 
break; 
case 'b': 
t = 11; 
break; 
case 'c': 
t = 12; 
break; 
case 'd': 
t = 13; 
break; 
case 'e': 
t = 14; 
break; 
case 'f': 
t = 15; 
break; 
default: 
t = tempChar - 48; 
break; 
}

c += t * ((int) Math.pow(16, (value.length() - j - 1))); 

sb.append((char) c); 
i = i + 6; 

return sb.toString(); 

 

当html中存在url中如: onclick="toView('参数1')", 参数1是特别字符,如&asop;&quot;' "等时,浏览器解析时会报错。解决方法如文中描述的更多相关文章

  1. iOS url带中文下载时 报错解决方法

    问题描述:下载文件时, 请求带中文的URL的资源时,比如:http://s237.sznews.com/pic/2010/11/23/e4fa5794926548ac953a8a525a23b6f2/ ...

  2. hive中创建子表并插入数据过程初始化MR报错解决方法

    本文继成上一篇通过hive分析nginx日志文章,详情参考下面链接: http://www.cnblogs.com/wcwen1990/p/7066230.html 接着来: 创建业务子表: drop ...

  3. .vue文件在webstorm中es6语法报错解决方法

    1 语法支持es6设置 Preferences > Languages & Frameworks > JavaScript 把 Javascript Language versio ...

  4. vuex2中使用mapMutations/mapActions报错解决方法 BabelLoaderError: SyntaxError: Unexpected token

    在尝鲜vuex2时,发现vuex2增加了 mapGetters 和 mapActions 的方法,借助stage2的 Object Rest Operator 特性,可以写出下面代码:methods: ...

  5. cmd命令中运行pytest命令导入模块报错解决方法

    报错截图 ImportError while loading conftest 'E:\python\HuaFansApi\test_case\conftest.py'. test_case\conf ...

  6. Python中pip install MySQL-python报错解决方法

    环境 Centos 7(其他Centos或者RHEL一样) 问题 在执行 pip install MySQL-python 时报错如: Command "python setup.py eg ...

  7. Eclipse中导入项目后js报错解决方法(转未解决问题)

    本文转自:http://blog.csdn.net/chenchunlin526/article/details/54666882 Eclipse中导入项目后js报错的原因与解决方法 在我们将项目导入 ...

  8. 类库文件引用web服务报错解决方法-在 ServiceModel 客户端配置部分中,找不到引用协定的默认终结点元素

    由于需求,需要改造原有应用,因原有应用是写在console下面的,现在需要开放至web下, 想到BIZ层应用代码都是一样的,又不想在web下在添加引用,而重复写代码,故将原有的console下的服务和 ...

  9. C#中往数据库插入空值报错解决方法

    C#中的NUll于SQL中的null是不一样的, SQL中的null用C#表示出来就是DBNull.Value 在用C#往数据库里面插入记录的时候, 可能有的字段你不赋值,那么这个字段的值就为null ...

随机推荐

  1. 硝烟中的scrum学习笔记 - 怎样制定Sprint计划(Plan Meeting)

    1. 如何估算我们这个sprint能做多少个故事点 1) 本能反应 2) 生产率计算  估算生产率/实际生产率  看看团队的历史,看看他们在过去几个sprint里的生产率是多少  然后假定在下一个sp ...

  2. [置顶] How to dump redo log entry?

    1.转储针对特定数据块(4号文件的第10-20号数据块)修改的 redo entry select file#,name,blocks from v$datafile;      FILE# NAME ...

  3. Parallax Mapping Shader 凸凹感【转】

    原文 http://www.azure.com.cn/default.asp?cat=11&page=2 Parallax Mapping 就是通过高度图中的高度,对纹理坐标进行偏移,来视觉上 ...

  4. 用VS2010开发Android应用的配置方法

    在开发你的第一个Android应用程序之前,你应该先检查一下是否安装了Android SDK,以及是否创建好了Android模拟器(AVD),如果有不清楚的地方,请先看百度这篇文章“Android是什 ...

  5. 关于IE8中使用Jquery load方法无法正常加载页面

    最近发现,在IE8中使用Jquery load方法时无法正常加载页面,页面显示空白,没有加载.调试发现,页面多了一个</div>标签,但在FF和CH下表现正常.希望能给遇到同样问题的码农有 ...

  6. 【XS128】Link error L1822 symbol _FADD / _FSUB/ _FDIV/ _FMUL.....错误解决的方法

    转载请注明出处 因为阅历有限,篇幅不周之处还望指出,谢谢 假设方法确实奏效,请一定回复点赞哦,给后来人也是一种帮助,谢谢! 这是飞思卡尔 XS128平台比較常见的LINK错误. 可是要解决起来也比較头 ...

  7. MySQL · BUG分析 · Rename table 死锁分析

    http://mysql.taobao.org/monthly/2016/03/06/ 背景 InnoDB buffer pool中的page管理牵涉到两个链表,一个是lru链表,一个是flush 脏 ...

  8. Discuz!X/模板标签说明

    Discuz 模板标签说明 Discuz! 的模板采用近似 PHP 表达式的语法,基本都是可识别的HTML,但涉及到变量和动态内容时,基本形式下: <!-{ 代码内容 }-> 逻辑元素包围 ...

  9. 主流Jquery弹出框优缺点对比

    一:BoxXy 缺点:动态加载隐藏的内容层时,是复制操作,而不是引用原内容层,这样会出现两个一样的内容层,影响id,class的jquery操作 二:artdialog

  10. Redis 性能测试

    Redis 性能测试是通过同时执行多个命令实现的. 语法 redis 性能测试的基本命令如下: redis-benchmark [option] [option value] 实例 以下实例同时执行 ...