解决页面由单引号、双引号、换行符导致的问题

最近在做驴妈妈旅游网站改版时,遇到了一个关于数据在界面显示的问题。网站使用的是el表达式作为页面数据显示,但在使用过程中,如果读取的字符串中存在‘”’(引号),则会出现错误

  例子:title="海螺沟自由行,观"日照金山" 泡温泉,住逸家温泉酒店+金山饭店双人标间_双人套票(CD)"  提示信息title显示:海螺沟自由行,观

  针对该问题可以使用如下解决方案

  (1)使用替换:title="${title?if_exists?replace(‘"’,)}"

  (2)用EL表达式的自定义函数

首先写格式化字符串的方法。

01
02
03
04
05
06
07
08
09
10
11
//这里我将换行符转化为空格," 转化为 \",'转化为 \'; ,也就是转化为JS的转义格式
public static String fs(String s){
 if(s!=null && s.length()>0){
 s = s.replaceAll("(\r|\n|\r\n|\n\r)", " ");
 s = s.replaceAll("\"","\\\\"+"\"");
 s = s.replaceAll("\'","\\\\"+"\'");
 return s;
 }else{
 return "";
 }
 }

WEB-INF下创建文件夹tags,用来存放标签文件。

然后在tags文件夹下创建formatForJS.tld文件,描述自定义函数。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8" ?>
 version="2.0">
 <description>A tag library exercising SimpleTag handlers.</description>
 <tlib-version>1.0</tlib-version>
 <short-name>SimpleTagLibrary</short-name>
 <uri>/fs</uri>
<function>
<description>format string value for JS</description>
<name>fs</name>
<function-class>kyo.org.ClassName</function-class>
<function-signature>java.lang.String fs(java.lang.String)</function-signature>
</function>
  
</taglib>

配置web.xml

1
2
3
4
5
6
7
8
<jsp-config>
<taglib>
<taglib-uri>http://www.2016k.com</taglib-uri>
<taglib-location>
/WEB-INF/tags/formatForJS.tld
</taglib-location>
</taglib>
</jsp-config>

在JSP页面的应用.
1
2
3
4
<%@ taglib prefix="k"  uri="http://www.2016k.com"%>
<script type="text/javascript">
alert('${k:fs(param)}');
</script>

如果param中含有单引号,就不会报脚本错误了。
以上代码,在tomcat6下测试通过,但是如果你的应用是部署在Websphere下,则还有需要注意的地方。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

1 × 1 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据