/* 
 * 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<br>"); 
  } 
 
  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 = { ">", ">", "<", "<", "[", 
      "[<b>", "]", "</b>]", "&", "&", "\"", """, "'", 
      "'", "\\", "\", "\251", "©", "\256", "®" }; 
  private static Hashtable entityTableEncode = null; 
 
} 
 
    
     
     
  
  |