我有一串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, '><', '')}</c:set>
<c:set var="displayValue">${fn:replace(displayValue, '<>', '')}</c:set>
答案 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去除标签。