日期:2014-05-17  浏览次数:20658 次

Struts2在web页面中回复引用的问题,如何防止用户插入HTML代码
如题,类似于论坛的留言回复,比如有留言'A',我想去引用留言'A'并回复,

我的处理方式是自动加上
Quote:
标签,存入数据库,然后前端页面使用Struts标签

<s:property value="#content" escape="false" />

这样会解析到标签并显示引用的效果,

但是问题是如何正确显示用户输入的HTML代码呢?

比如如果用在留言框上输入<textarea></textarea>会显示为一个输入框。。
------解决方案--------------------
你的意思是特殊字符的过滤吧!我们页面上显示的特殊字符是可以通过转义字符来实现的,比如\n等于换行,又例如,HTML的&lt; &gt;&amp;"&copy;对别是<,>,&,",&copy;的转义字符。那么如果你把标签的一对尖括号<> 用特殊字符代替,它便失去了HTML标签的功能,而变成普普通通的字符,之所以你在主题中打出来的<textarea></textarea>在论坛上没有实现标签的功能,是因为这个论坛在取出数据库的原数据后,用字符过滤的方法把原数据中的特殊符号都进过了转义。至于过滤的方法,我自己在用的是toHTML(String)为方法,String就是你数据库里的原数据,详细实现,自己想吧。
------解决方案--------------------
js 操作。。。
------解决方案--------------------
类似 &lt; &gt;&  的或者过滤特殊字符,正则等。 
------解决方案--------------------
<![CDATA[  ]]> 
------解决方案--------------------

public static String filter(String message) {

        if (message == null)
            return (null);

        char content[] = new char[message.length()];
        message.getChars(0, message.length(), content, 0);
        StringBuilder result = new StringBuilder(content.length + 50);
        for (int i = 0; i < content.length; i++) {
            switch (content[i]) {
            case '<':
                result.append("&lt;");
                break;
            case '>':
                result.append("&gt;");
                break;
            case '&':
                result.append("&amp;");
                break;
            case '"':
                result.append("&quot;");
                break;
            default:
                result.append(content[i]);
            }
        }
        return (result.toString());
}