Escape html entities.
/*
* Copyright 2008-2010 the T2 Project ant the Others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
//package org.t2framework.commons.util;
/**
* <#if locale="en">
* <p>
* Escape html entities. You can plug in HtmlEscapeStrategy and change behavior.
*
* </p>
* <#else>
* <p>
*
* </p>
* </#if>
*
* @author shot
*/
public class HtmlEscapeUtil {
private static HtmlEscapeStrategy escapeStrategy = new DefaultHtmlEscapeStrategy();
public static HtmlEscapeStrategy getHtmlEscapeStrategy() {
return escapeStrategy;
}
public static void setHtmlEscapeStrategy(
HtmlEscapeStrategy htmlEscapeStrategy) {
escapeStrategy = htmlEscapeStrategy;
}
public static String escape(final String s) {
return escape(s, true, true);
}
public static String escape(final String s, final boolean quote,
final boolean amp) {
return escapeStrategy.escape(s, quote, amp);
}
public static interface HtmlEscapeStrategy {
public String escape(final String s, final boolean quote,
final boolean amp);
}
public static abstract class AbstractHtmlEscapeStrategy implements
HtmlEscapeStrategy {
public String escape(final String s, final boolean quote,
final boolean amp) {
char[] chars = s.toCharArray();
StringBuffer sb = new StringBuffer(s.length() + 64);
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
escapeEach(sb, c, quote, amp);
}
return new String(sb);
}
protected abstract void escapeEach(final StringBuffer buf,
final char c, final boolean quote, final boolean amp);
}
public static class DefaultHtmlEscapeStrategy extends
AbstractHtmlEscapeStrategy {
protected void escapeEach(final StringBuffer sb, final char c,
final boolean quote, final boolean amp) {
if ((int) c == '\u00A0') {
sb.append(" ");
} else if (c == '<') {
sb.append("<");
} else if (c == '>') {
sb.append(">");
} else if (amp && c == '&') {
sb.append("&");
} else if (c == '"') {
sb.append(""");
} else if (quote && c == '\'') {
sb.append("'");
} else if ((int) c == '\u00A5') {
sb.append("¥");
} else {
sb.append(c);
}
}
}
public static class JapaneseHtmlEscapeStrategy extends
AbstractHtmlEscapeStrategy {
protected void escapeEach(final StringBuffer sb, final char c,
final boolean quote, final boolean amp) {
if ((int) c == '\u00A0') {
sb.append(" ");
} else if (c == '<') {
sb.append("<");
} else if (c == '>') {
sb.append(">");
} else if (amp && c == '&') {
sb.append("&");
} else if (c == '"') {
sb.append(""");
} else if (quote && c == '\'') {
sb.append("'");
} else if ((int) c == '\u00A5' || (int) c == '\u005C\') {
sb.append("¥");
} else {
sb.append(c);
}
}
}
}
---------------------
/*
* Copyright 2008-2009 the T2 Project ant the Others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.t2framework.commons.util;
import org.t2framework.commons.util.HtmlEscapeUtil;
import org.t2framework.commons.util.HtmlEscapeUtil.HtmlEscapeStrategy;
import junit.framework.TestCase;
public class HtmlEscapeUtilTest extends TestCase {
public void testescape_amp() throws Exception {
assertEquals(" ", HtmlEscapeUtil.escape(" ", false, false));
assertEquals("&nbsp;", HtmlEscapeUtil.escape(" ", true, true));
}
public void testescape_quote() throws Exception {
assertEquals("'hoge'", HtmlEscapeUtil.escape("'hoge'", false, false));
assertEquals("'hoge'", HtmlEscapeUtil.escape("'hoge'", true,
true));
}
public void testescape_lt() throws Exception {
assertEquals("<<", HtmlEscapeUtil.escape("<<", false, false));
assertEquals("<<", HtmlEscapeUtil.escape("<<", true, true));
}
public void testescape_gt() throws Exception {
assertEquals(">>", HtmlEscapeUtil.escape(">>", false, false));
assertEquals(">>", HtmlEscapeUtil.escape(">>", true, true));
}
public void testescape_00A5_withDefaultStrategy() throws Exception {
char c = '\u00a5';
assertEquals("¥", HtmlEscapeUtil.escape(Character.toString(c),
false, false));
assertEquals("¥", HtmlEscapeUtil.escape(Character.toString(c),
true, true));
c = '\u005c\';
assertNotSame("¥", HtmlEscapeUtil.escape(Character.toString(c),
false, false));
assertNotSame("¥", HtmlEscapeUtil.escape(Character.toString(c),
true, true));
assertEquals("\\", HtmlEscapeUtil.escape(Character.toString(c), false,
false));
assertEquals("\\", HtmlEscapeUtil.escape(Character.toString(c), true,
true));
}
public void testescape_yen() throws Exception {
HtmlEscapeStrategy orgStrategy = HtmlEscapeUtil.getHtmlEscapeStrategy();
HtmlEscapeUtil
.setHtmlEscapeStrategy(new HtmlEscapeUtil.JapaneseHtmlEscapeStrategy());
assertEquals("¥¥", HtmlEscapeUtil.escape("\\\\", false, false));
assertEquals("¥¥", HtmlEscapeUtil.escape("\\\\", true, true));
HtmlEscapeUtil.setHtmlEscapeStrategy(orgStrategy);
}
}
Related examples in the same category