LoginSignup
1
0

More than 5 years have passed since last update.

Javaで簡易htmlspecialchars

Posted at

Javaで文字コードを考えてないhtmlspecialcharsを作る

外部ライブラリが使えない環境下でエスケープ処理をする必要が出てきたので書いた。環境はWindowsでJava10

javaにはデフォルト引数が使えないので、ENT_QUOTESとかを文字列の引数で受け取ることに、今後文字コード等を考えていくならオーバーロードして作るのがよさそう。

function

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_COMPATENT_QUOTES指定されてなければreturn ret;でいい気がした。

main
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;
1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0