// JRE 1.6.0_07
// Commons Lang 2.4
// HTML,Javascript,XMLのエスケープ
// org.apache.commons.lang.StringEscapeUtils
// tag エスケープ,サニタイズ
// HTMLらしき文字列
String html = "<a href=\"hoge.html\">ほげ</a>";
// HTMLのエスケープ
// マルチバイト文字に対して頑張り過ぎてしまう
String escHtml = StringEscapeUtils.escapeHtml( html );
System.out.println( escHtml );
//=> <a href="hoge.html">ほげ</a>
// 頑張り過ぎが嫌な場合は、org.apache.commons.lang.Entities.javaの
// 831行目辺りの記述をいい感じに書き換えてJAR作り直すとか
// さらに頑張り過ぎなことをすれば対応できなくはないです
// HTMLのアンエスケープ
String unescHtml = StringEscapeUtils.unescapeHtml( escHtml );
System.out.println( unescHtml );
//=> <a href="hoge.html">ほげ</a>
// JavaScriptの場合
// これもマルチバイト文字を頑張ってくれます
String js = "\"とか/";
String escJs = StringEscapeUtils.escapeJavaScript( js );
System.out.println( escJs );
//=> \"\u3068\u304B\/
// unescape
System.out.println( StringEscapeUtils.unescapeJavaScript( escJs ) );
//=> "とか/
// JavaScriptの頑張りを消したい時も、中の子を書き換える必要があります
// private static void escapeJavaStyleString(Writer, String, boolean)
// この子です。
// privateじゃなければ、継承して直したいところですが。
// XMLもあります
String xml = "<xml version=\"1.0\"><a>ほげ</a>";
String escXml = StringEscapeUtils.escapeXml( xml );
System.out.println( escXml );
//=> <xml version="1.0"><a>ほげ</a>
String unescXml = StringEscapeUtils.unescapeXml( escXml );
System.out.println( unescXml );
//=> <xml version="1.0"><a>ほげ</a>