用Java编写简易htmlspecialchars函数

创建一个不考虑字符编码的htmlspecialchars函数,使用Java编程。

由于在无法使用外部库的环境下需要进行转义处理,所以写了这段代码。环境是Windows上的Java10。

在Java中,由于无法使用默认参数,因此如果今后考虑字符编码等因素,最好通过重载来接受像ENT_QUOTES这样的字符串参数进行处理。


public class Escape{


    /**
        & to &
        " to " if flag.equals("ENT_COMPAT") flag.equals("ENT_QUOTES")
        ' to ' if flag.equals("ENT_QUOTES")
        < to &lt;
        > to &gt;
    */
    public static String htmlspecialchars(String s, String flag){
        String ret = s.replace("&","&amp;").replace("<","&lt;").replace(">","&gt;");
        if(flag.equals("ENT_COMPAT")){
            return ret.replace("\"", "&quot;");
        }else if(flag.equals("ENT_QUOTES")){
            return ret.replace("'", "&apos;").replace("\"","&quot;");
        }else if(flag.equals("ENT_NOQUOTES")){
            return ret;
        }
        return ret;
    }
}

如果没有指定 ENT_COMPAT 和 ENT_QUOTES,我觉得就可以返回 ret,但是不是特别漂亮。

public static void main(String[] args){
        System.out.println(htmlspecialchars("<script>alert(\"1\");</script>","ENT_COMPAT"));
        System.out.println(htmlspecialchars("<script>alert(\"1\");</script>","ENT_NOQUOTES"));
        System.out.println(htmlspecialchars("<script>alert('1');</script>","ENT_QUOTES"));
    }
>java Escape
&lt;script&gt;alert(&quot;1&quot;);&lt;/script&gt;
&lt;script&gt;alert("1");&lt;/script&gt;
&lt;script&gt;alert(&apos;1&apos;);&lt;/script&gt;
bannerAds