2015-12-10 31 views
0

我有一串html代碼,裏面有一些額外的標籤。我需要擺脫其他標籤,但不能使用fn:escapeXML,因爲這會使字符串不再可用作html。使用fn:替換和轉義jstl中的特殊字符

例如: 「NEWLINK」的值設置爲:

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

我如何使用Fn:更換(或其他一些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>

+0

我很難理解爲什麼不能使用'fn:escapeXml()'。如果你只是告訴我們期望的結果應該是什麼樣子,我認爲這很容易。 – BalusC

+0

這並不是說它不能被使用;這是它不符合<>值。 –

+0

你只是想解析和剝離HTML而不是轉義XML?不過,如果您只是告訴給定示例的預期結果應該如何,它會更容易。 – BalusC

回答

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 ... 
} 

現在將此類包含在標記庫描述符中。在JSP

<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> 

及用途:

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

${myfn:removeTags(...)} 

我選擇myfn作爲前綴,但你可以自由選擇任何適合你。

不知道建議的正則表達式是否完全滿足您的需求,但它展示了自定義函數的原理。你可以做任何Java讓你在那裏,你甚至可以使用jsoup擺脫標籤。