使用fn:在jstl中替换和转义特殊字符

时间:2015-12-10 17:39:47

标签: html replace jstl

我有一串html代码,里面有一些额外的标签。我需要摆脱额外的标签,但不能使用fn:escapeXML,因为这会使字符串不再可用作html。

实施例: “newLink”的值设置为:

<a href="This is a <span class="help">test</span>">This is a <span class="help">test</span></a>

如何使用fn:replace(或其他一些jstl编码)来删除内部标记?

这是我迄今为止所管理的内容。不幸的是,最后一个似乎与空标签不匹配。

<c:set var="displayValue">${fn:replace(pnxItem, 'span class=\"searchword\"', '')}</c:set> <c:set var="displayValue">${fn:replace(displayValue, '/span', '')}</c:set> <c:set var="displayValue">${fn:replace(displayValue, '&gt;<', '')}</c:set> <c:set var="displayValue">${fn:replace(displayValue, '<>', '')}</c:set>

1 个答案:

答案 0 :(得分:0)

如果你能使用regular expression,那会不会很好? Jstl的替换函数不会将正则表达式作为参数,正如您可能已经知道的那样,从您采用的方法来判断。

幸运的是,编写自己的函数非常容易。我总是随身携带一个名为StringFunctions的类,它由static函数组成,用作自定义函数库,例如,它包含removeTags函数。

 package com.whatever.viewhelpers;

 public class StringFunctions {  

    public static String removeTags(String s) {

        return s.replaceAll("\\<.*?>","");
    }

    // more functions ...
}

现在将此类包含在标记库描述符中。

<taglib xmlns="http://java.sun.com/xml/ns/j2ee" version="2.0">  

    <tlib-version>1.0</tlib-version>  
    <short-name>myfn</short-name>  
    <uri>http://www.whatever.com/taglib/trlbt</uri>  

    <function>    
        <name>removeTags</name>    
        <function-class>
            com.whatever.viewhelpers.StringFunctions
        </function-class>    
        <function-signature>    
            String removeTags(java.lang.String)    
        </function-signature>  
    </function> 

    <!-- more functions -->

</taglib>

并在jsp中使用:

<%@ taglib prefix="myfn" uri="/WEB-INF/taglib/tlb.tld" %>
....

${myfn:removeTags( ... )}

我选择myfn作为前缀,但您可以自由选择适合您的任何内容。

不确定提议的正则表达式是否完全满足您的需求,但它展示了自定义函数的原理。你可以做任何Java允许你在那里做的事情,你甚至可以使用jsoup去除标签。