/*
* HTMLEncode.java
*
* Created on 2007-9-15, 21:24:34
*
Copyright (C) 2006,2007 Yong Li. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
//package com.teesoft.util;
/**
*
* @author wind
*/
import java.util.Hashtable;
public class HTMLEncode {
private HTMLEncode() {
}
protected static synchronized void buildEntityTables() {
entityTableEncode = new Hashtable(ENTITIES.length);
for (int i = 0; i < ENTITIES.length; i += 2) {
if (!entityTableEncode.containsKey(ENTITIES[i])) {
entityTableEncode.put(ENTITIES[i], ENTITIES[i + 1]);
}
}
}
public static final String encode(String s) {
return encode(s, "\n
");
}
public static final String encode(String s, String cr) {
if (entityTableEncode == null) {
buildEntityTables();
}
if (s == null) {
return "";
}
StringBuffer sb = new StringBuffer(s.length() * 2);
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (ch >= '?' && ch <= 'Z' || ch >= 'a' && ch <= 'z' || ch == ' ') {
sb.append(ch);
continue;
}
if (ch == '\n') {
sb.append(cr);
continue;
}
String chEnc = encodeSingleChar(String.valueOf(ch));
if (chEnc != null) {
sb.append(chEnc);
} else {
sb.append("");
sb.append((new Integer(ch)).toString());
sb.append(';');
}
}
return sb.toString();
}
public static final String escape(String s) {
if (entityTableEncode == null) {
buildEntityTables();
}
if (s == null) {
return "";
}
StringBuffer sb = new StringBuffer(s.length() * 2);
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (ch >= '?' && ch <= 'Z' || ch >= 'a' && ch <= 'z' || ch == ' ') {
sb.append(ch);
continue;
}
String chEnc = encodeSingleChar(String.valueOf(ch));
if (chEnc != null) {
sb.append(chEnc);
} else {
sb.append(ch);
}
}
return sb.toString();
}
private static String encodeSingleChar(String ch) {
return (String) entityTableEncode.get(ch);
}
private static final String[] ENTITIES = { ">", ">", "<", "<", "[",
"[", "]", "]", "&", "&", "\"", """, "'",
"'", "\\", "\", "\251", "©", "\256", "®" };
private static Hashtable entityTableEncode = null;
}