java如何解决解析html的单引号嵌套

来源:互联网 发布:mac子弹头brave试色 编辑:程序博客网 时间:2024/06/14 00:49

这是一篇比较简单文章,主要是用于技术备忘。


这里解决的主要问题是,后台需要拼接html字符串,在html字符串中会有引号包含单引号的情况,尝试了很久,才知道尝试出结果:

sb.append("data-rules='{selectRequired:[true,'" +"#sl" + bo.getKey() + "']}' ");

因为JAVA中双引号是代表字符串定义,双引号中可以再包含单引号。但是,如果我们如下写法

sb.append("data-rules='{selectRequired:[true,'" +"#sl" + bo.getKey() + "']}' ");

浏览器的解析结果是

data-rules="{selectRequired:[true, " #slalias4']}'

明显不对,我们需要的是data-rules="{selectRequired:[true, '#slalias4']} "。

换个思考的方式,我们是将字符串传递给浏览器,最终浏览器会对html的引号重新解析,所以,我们应该考虑使用html的转义才对。所以,使用'就可以解决问题了。再试探一下这个想法是不是对的,我们修改一下语句如下:

sb.append("data-rules="{selectRequired:[true,'" +"#sl" + bo.getKey() + "']}" ");

啊哈,居然不对

data-rules=""{selectRequired:[true,"'#slalias4']}"=""

打出JAVA的拼接结果看看,

data-rules=&quot;{selectRequired:[true, &apos;#slalias4&apos;]}&quot;/><span class='icon-delelte-input'>

符合我们的预想,在String中是单引号的返回的还是单引号。但是浏览器解析的时候,会先把&quot;和&apos;组合在一起。当前看来,只能使用第一种形式。具体原因有待以后考证。

 

备注:还有一种可行性,就是尽量避免直接使用字符串拼接html字符串,维护性和扩张性都不强,而且类似本文这种情况,不便做调试和修改。可以采用一些模板工具,比如velocity或者freemaker来解决这一的问题。

 


0 0
原创粉丝点击