-
-
Save taichi/890130 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import static org.junit.Assert.assertEquals; | |
import org.junit.Test; | |
public class EscapeHtmlTest { | |
/** | |
* 引数で与えられた文字列にHTMLエスケープを行った結果文字列を返す | |
* | |
* @param str | |
* @return | |
*/ | |
private static String escapeHTML(String str) { | |
if (str == null) { | |
return null; | |
} | |
// J2SE1.5以降なら、同期処理の無いStringBuilderを使う。 | |
// StringBuilderは、初期化サイズが16だが小さすぎるので、入力の2倍とる。 | |
StringBuilder sb = new StringBuilder(str.length() * 2); | |
// エスケープの対象サイズを確定する事で、余分なエラーチェックの回数を減らす。 | |
char[] ary = str.toCharArray(); | |
for (int i = 0, length = ary.length; i < length; i++) { | |
char c = ary[i]; | |
if (c == ' ') { // 半角スペース | |
sb.append(" "); | |
} else if (c == '\u00A5') { // ¥サイン | |
sb.append("¥"); | |
} else if (c == '<') { | |
sb.append("<"); | |
} else if (c == '>') { | |
sb.append(">"); | |
} else if (c == '&') { | |
sb.append("&"); | |
} else if (c == '"') { | |
sb.append("""); | |
} else if (c == '\'') { | |
sb.append("'"); | |
} else { | |
sb.append(c); | |
} | |
} | |
return sb.toString(); | |
} | |
@Test | |
public void testEscapeHTML() throws Exception { | |
assertEquals(escapeHTML("abcdefg"), "abcdefg"); | |
assertEquals(escapeHTML("試験テスト"), "試験テスト"); | |
assertEquals( | |
escapeHTML("<script>alert('test');</script>&url=http://test"), | |
"<script>alert('test');</script>&url=http://test"); | |
assertEquals(escapeHTML("hoge fuga"), "hoge fuga"); | |
assertEquals(escapeHTML("hoge\u00A5fuga"), "hoge¥fuga"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment