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 <
> to >
*/
public static String htmlspecialchars(String s, String flag){
String ret = s.replace("&","&").replace("<","<").replace(">",">");
if(flag.equals("ENT_COMPAT")){
return ret.replace("\"", """);
}else if(flag.equals("ENT_QUOTES")){
return ret.replace("'", "'").replace("\"",""");
}else if(flag.equals("ENT_NOQUOTES")){
return ret;
}
return ret;
}
}
あんまりきれいじゃない、ENT_COMPAT
とENT_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
<script>alert("1");</script>
<script>alert("1");</script>
<script>alert('1');</script>