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

Html 使用fn:jstl中的替换和转义特殊字符,html,replace,jstl,Html,Replace,Jstl,我有一个html代码字符串,里面有一些附加的标记。我需要去掉额外的标记,但不能使用fn:escapeXML,因为这将使字符串不再可用作html 例如: “newLink”的值设置为: 如何使用fn:replace(或其他一些jstl编码)去除内部标记 这就是我到目前为止所做的。不幸的是,最后一个似乎与空标记不匹配 ${fn:replace(pnxItem,'span class=\'searchword\','') ${fn:replace(displayValue,'/span','')}

我有一个html代码字符串,里面有一些附加的标记。我需要去掉额外的标记,但不能使用fn:escapeXML,因为这将使字符串不再可用作html

例如: “newLink”的值设置为:

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

这就是我到目前为止所做的。不幸的是,最后一个似乎与空标记不匹配

${fn:replace(pnxItem,'span class=\'searchword\','')
${fn:replace(displayValue,'/span','')}

${fn:replace(displayValue,如果您可以使用
正则表达式
,那不是很好吗?从您所采取的方法来看,Jstl的replace函数不使用正则表达式作为参数,您可能已经知道了

幸运的是,编写自己的函数很容易。我总是带着一个名为
StringFunctions
的类,它由
静态
函数组成,用作一个自定义函数库,其中包含一个
removeTags
函数

 package com.whatever.viewhelpers;

 public class StringFunctions {  

    public static String removeTags(String s) {

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

    // more functions ...
}
package com.whatever.viewhelpers;
公共类函数{
公共静态字符串移除标记(字符串s){
返回s.replaceAll(“\\”,“”);
}
//更多功能。。。
}
现在将此类包含在标记库描述符中

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

1
myfn
http://www.whatever.com/taglib/trlbt  
移除标签
com.whatever.viewhelpers.StringFunctions
stringremovetags(java.lang.String)
并在jsp中使用:

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

${myfn:removeTags( ... )}

....
${myfn:removeTags(…)}
我选择了
myfn
作为前缀,但您可以自由选择适合自己的内容


不确定所建议的正则表达式是否完全满足您的需要,但它演示了自定义函数的原理。您可以在其中执行Java允许的任何操作,甚至可以使用它来去除标记。

我很难理解为什么
fn:escapeXml()
无法使用。我认为,如果您只告诉所需结果应该是什么样子会更容易。并不是说它无法使用,而是它与值不匹配。您只想解析和剥离HTML而不是转义XML?不过,如果您只告诉给定示例所需结果应该是什么样子会更容易。