1 64 65 package com.jcorporate.expresso.core.misc; 66 67 import java.util.Arrays ; 68 69 77 public class HTMLUtil { 78 79 82 private HTMLUtil() { 83 }; 84 85 91 public static String text2html(String text) { 92 if (text == null) { 93 return text; 94 } 95 StringBuffer t = new StringBuffer (text.length() + 10); for (int i = 0; i < text.length(); i++) { 97 char c = text.charAt(i); 98 if ((int) c < SYMBOLIC_CODE.length) { String sc = SYMBOLIC_CODE[(int) c]; 101 if ("".equals(sc)) { 102 t = t.append(c); 103 } else { 104 t = t.append(sc); 105 } 106 } else { 107 t = t.append(c); 108 } 109 } 110 return t.toString(); 111 } 112 113 119 public static String html2text(String text) { 120 if (text == null) { 121 return text; 122 } 123 StringBuffer t = new StringBuffer (text.length()); 124 initSortedArray(); 125 for (int i = 0; i < text.length(); i++) { 126 char c = text.charAt(i); 127 if (c == '&') { 128 String code = String.valueOf(c); 129 do { 130 if (++i >= text.length()) { 131 break; 132 } 133 if (text.charAt(i) == '&') { 134 i--; 135 break; 136 } 137 code += text.charAt(i); 138 } while (text.charAt(i) != ';'); 139 140 int index = Arrays.binarySearch(sortedSymbolicCode, 141 new NumericSymbolicCode(code, 0)); 142 if (index >= 0) { 144 t = t.append((char) sortedSymbolicCode[index].getNumericCode()); 145 } else { 146 t = t.append(code); 147 } 148 } else { 149 t = t.append(c); 150 } 151 } 152 return t.toString(); 153 } 154 155 158 private static void initSortedArray() { 159 if (sortedSymbolicCode == null) { 160 sortedSymbolicCode = new NumericSymbolicCode[SYMBOLIC_CODE.length]; 161 162 for (int i = 0; i < SYMBOLIC_CODE.length; i++) { 163 sortedSymbolicCode[i] = new NumericSymbolicCode(SYMBOLIC_CODE[i], i); 164 } 165 Arrays.sort(sortedSymbolicCode); 166 } 167 } 168 169 175 private static final String [] SYMBOLIC_CODE = { 176 "", "", "", "", "", "", "", "", "", "", 178 "<br>", "", "", "", "", "", "", "", "", "", 180 "", "", "", "", "", 182 "", "", "", "", "", 184 "", "", "", "", 186 """, "", "", "", "", "'", 188 "", "", "", "", "", "", "", "", "", "", 190 "", "", "", "", "", "", "", "", "", "", 192 "", "", "", "", 194 "@", "", "", "", "", "", 196 "", "", "", "", "", "", "", "", "", "", 198 "", "", "", "", "", "", "", "", "", "", 200 "", "", "", "", "", "", 202 "`", "", "", "", 204 "", "", "", "", "", "", "", "", "", "", 206 "", "", "", "", "", "", "", "", "", "", 208 "", "", "", "", "", "", "", "", "€", "", 209 "", "", "", "", "", "", "", "", "", "", 210 "", "", "", "", "", "‘", 212 "’", "“", "”", "", 214 "", "", "", "", "", "", "", "", "", "", 216 "", "¡", "¢", "£", "¤", "¥", "¦", "§", "¨", "©", "ª", "«", "¬", "­", "®", "¯", "°", "±", "²", "³", "´", "µ", "¶", "·", "¸", "&supl;", "º", "»", "¼", "½", "¾", "¿", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ý", "þ", "ÿ", }; 323 324 328 private static NumericSymbolicCode[] sortedSymbolicCode = null; 329 330 337 final private static class NumericSymbolicCode implements Comparable { 338 339 public NumericSymbolicCode(String symbolicCode, int numericCode) { 340 this.symbolicCode = symbolicCode; 341 this.numericCode = numericCode; 342 } 343 344 public String getSymbolicCode() { 345 return symbolicCode; 346 } 347 348 public int getNumericCode() { 349 return numericCode; 350 } 351 352 public int compareTo(Object object) { 353 NumericSymbolicCode nsc = (NumericSymbolicCode) object; 354 return symbolicCode.compareTo(nsc.symbolicCode); 355 } 356 357 private String symbolicCode; 358 private int numericCode; 359 } 360 361 } 362 | Popular Tags |