package org.jblooming.utilities; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; /** * @author Pietro Polsinelli ppolsinelli@open-lab.com * @author Roberto Bicchierai rbicchierai@open-lab.com */ public class HTMLEncoderOld { static String schr(int i) { return new String(new char[]{(char) i}); } static String[] HTMLEncodingArray = { " ", schr(1), schr(2), schr(3), schr(4), schr(5), schr(6), schr(7), schr(8), schr(9), schr(10), schr(11), schr(12), schr(13), schr(14), schr(15), schr(16), schr(17), schr(18), schr(19), schr(20), schr(21), schr(22), schr(23), schr(24), schr(25), schr(26), schr(27), schr(28), schr(29), schr(30), schr(31), schr(32), schr(33), """, schr(35), schr(36), schr(37), "&", "'", schr(40), schr(41), schr(42), schr(43), schr(44), schr(45), schr(46), schr(47), schr(48), schr(49), schr(50), schr(51), schr(52), schr(53), schr(54), schr(55), schr(56), schr(57), schr(58), schr(59), "<", schr(61), ">", schr(63), schr(64), schr(65), schr(66), schr(67), schr(68), schr(69), schr(70), schr(71), schr(72), schr(73), schr(74), schr(75), schr(76), schr(77), schr(78), schr(79), schr(80), schr(81), schr(82), schr(83), schr(84), schr(85), schr(86), schr(87), schr(88), schr(89), schr(90), schr(91), schr(92), schr(93), schr(94), schr(95), schr(96), schr(97), schr(98), schr(99), schr(100), schr(101), schr(102), schr(103), schr(104), schr(105), schr(106), schr(107), schr(108), schr(109), schr(110), schr(111), schr(112), schr(113), schr(114), schr(115), schr(116), schr(117), schr(118), schr(119), schr(120), schr(121), schr(122), schr(123), schr(124), schr(125), schr(126), schr(127), "€", schr(129), "‚", "ƒ", "„", "…", "†", "‡", "ˆ", "‰", "Š", "‹", "Œ", schr(141), "Ž", schr(143), schr(144), "‘", "’", "“", "”", "•", "–", "—", "˜", "™", "š", "›", "œ", schr(157), "ž", "Ÿ", " ", "¡", "¢", "£", "¤", "¥", "¦", "§", "¨", "©", "ª", "«", "¬", "­", "®", "¯", "°", "±", "²", "³", "´", "µ", "¶", "·", "¸", "¹", "º", "»", "¼", "½", "¾", "¿", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ý", "þ", "ÿ" }; static boolean[] isHTMLEncoded = { true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true }; public static boolean isEncoded(char c) { if (c < 0 || c >= isHTMLEncoded.length) return true; return isHTMLEncoded[c]; } public static String encode(char c) { if (c < 0) return ""; else if (c < HTMLEncodingArray.length) return HTMLEncodingArray[c]; else return "&" + ((int) c) + ';'; } private static void encode(char c, StringBuffer sb) { if (c < 0) return; else if (c < HTMLEncodingArray.length) if (isEncoded(c)) sb.append(HTMLEncodingArray[c]); else sb.append(c); else sb.append('&').append((int) c).append(';'); } private static final String encode(String s, int start) { StringBuffer sb = new StringBuffer(); if (start > 0) sb.append(s.substring(0, start)); for (int i = start; i < s.length(); ++i) encode(s.charAt(i), sb); return sb.toString(); } /** * @param s * @return * @deprecated the url escape sequences are '<percent-sign>xx'. No zeros are allowed before '<percent-sign>' */ public static String mailtoEncode(String s) { char[] ch = s.toCharArray(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < ch.length; ++i) { char c = ch[i]; if (Character.isLetterOrDigit(c)) { sb.append(c); } else { String value = Integer.toHexString(c); for (int j = 0; j < (2 - value.length()); ++j) sb.append('0'); if (value.length() > 2) value = value.substring(0, 2); sb.append('%').append(value); } } return sb.toString(); } public static String urlEncode(String s) { if (s == null) return ""; char[] ch = s.toCharArray(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < ch.length; ++i) { char c = ch[i]; if (Character.isLetterOrDigit(c)) { sb.append(c); } else { String value = Integer.toHexString(c); while (value.length() < 2) value = '0' + value; if (value.length() > 2) value = value.substring(0, 2); sb.append('%').append(value); } } return sb.toString(); } /** * @param input * @return * @deprecated Be careful with this method: its use for sticky notes leaded to malfunctions. * The solution was {@link JSP#encode(String) encode(String input)}. */ public static String htmlFormattedString(String input) { if (input == null) return ""; StringBuffer inputBuff = new StringBuffer(input); StringBuffer outputBuff = new StringBuffer(512); if (inputBuff != null && inputBuff.length() > 0) { int i = 0; while (i < inputBuff.length()) { //collects first occurrences of characters to be encoded Collection ints = new HashSet(); int nextOccurenceOfSingleApex = (inputBuff.indexOf("'", i) > -1 ? inputBuff.indexOf("'", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfSingleApex)); int nextOccurenceOfDoubleApex = (inputBuff.indexOf("\"", i) > -1 ? inputBuff.indexOf("\"", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfDoubleApex)); int nextOccurenceOfCR = (inputBuff.indexOf("\r\n", i) > -1 ? inputBuff.indexOf("\r\n", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfCR)); int nextOccurenceOfWordFirstSingleApex = (inputBuff.indexOf(schr(8216), i) > -1 ? inputBuff.indexOf(schr(8216), i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfWordFirstSingleApex)); int nextOccurenceOfWordSecondSingleApex = (inputBuff.indexOf(schr(8217), i) > -1 ? inputBuff.indexOf(schr(8217), i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfWordSecondSingleApex)); int nextOccurenceOfWordFirstDoubleApex = (inputBuff.indexOf(schr(8220), i) > -1 ? inputBuff.indexOf(schr(8220), i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfWordFirstDoubleApex)); int nextOccurenceOfWordSecondDoubleApex = (inputBuff.indexOf(schr(8221), i) > -1 ? inputBuff.indexOf(schr(8221), i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfWordSecondDoubleApex)); int cursor = getMinValue(ints); if (cursor == Integer.MAX_VALUE) { outputBuff.append(inputBuff.substring(i)); break; } else { outputBuff.append(inputBuff.substring(i, cursor)); i = cursor; if (nextOccurenceOfSingleApex == cursor) outputBuff.append("’"); else if (nextOccurenceOfDoubleApex == cursor) outputBuff.append("""); else if (nextOccurenceOfWordFirstDoubleApex == cursor) outputBuff.append("“"); else if (nextOccurenceOfWordSecondDoubleApex == cursor) outputBuff.append("”"); else if (nextOccurenceOfWordFirstSingleApex == cursor) outputBuff.append("‘"); else if (nextOccurenceOfWordSecondSingleApex == cursor) outputBuff.append("’"); else if (nextOccurenceOfCR == cursor) { outputBuff.append("<br>"); i++; } i++; } } } return outputBuff.toString(); } public static String jsFormattedString(String input) { if (input == null) return ""; StringBuffer inputBuff = new StringBuffer(input); StringBuffer outputBuff = new StringBuffer(512); if (inputBuff != null && inputBuff.length() > 0) { int i = 0; while (i < inputBuff.length()) { //collects first occurrences of characters to be encoded Collection ints = new HashSet(); int nextOccurenceOfSingleApex = (inputBuff.indexOf("'", i) > -1 ? inputBuff.indexOf("'", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfSingleApex)); int nextOccurenceOfDoubleApex = (inputBuff.indexOf("\"", i) > -1 ? inputBuff.indexOf("\"", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfDoubleApex)); int cursor = getMinValue(ints); if (cursor == Integer.MAX_VALUE) { outputBuff.append(inputBuff.substring(i)); break; } else { outputBuff.append(inputBuff.substring(i, cursor)); i = cursor; if (nextOccurenceOfSingleApex == cursor) outputBuff.append('\''); else if (nextOccurenceOfDoubleApex == cursor) outputBuff.append('"'); i++; } } } return outputBuff.toString(); } /** * input is a html encoded string; returns a decoded string * * @param input */ public static String textareaFormattedString(String input) { if (input == null) return ""; StringBuffer inputBuff = new StringBuffer(input); StringBuffer outputBuff = new StringBuffer(512); int i = 0; if (inputBuff != null && inputBuff.length() > 0) { while (i < inputBuff.length()) { //collects first occurrences of characters to be encoded Collection ints = new HashSet(); int nextOccurenceOfWordFirstDoubleApex = (inputBuff.indexOf("“", i) > -1 ? inputBuff.indexOf("“", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfWordFirstDoubleApex)); int nextOccurenceOfWordSecondDoubleApex = (inputBuff.indexOf("”", i) > -1 ? inputBuff.indexOf("”", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfWordSecondDoubleApex)); int nextOccurenceOfCR = (inputBuff.indexOf("<br>", i) > -1 ? inputBuff.indexOf("<br>", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfCR)); int nextOccurenceOfSingleApex = (inputBuff.indexOf("’", i) > -1 ? inputBuff.indexOf("’", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfSingleApex)); int nextOccurenceOfAccent = (inputBuff.toString().indexOf("'", i) > -1 ? inputBuff.toString().indexOf("'", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfAccent)); int nextOccurenceOfDoubleApex = (inputBuff.indexOf(""", i) > -1 ? inputBuff.indexOf(""", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfDoubleApex)); int nextOccurenceOfWordFirstSingleApex = (inputBuff.indexOf("‘", i) > -1 ? inputBuff.indexOf("‘", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfWordFirstSingleApex)); int nextOccurenceOfWordSecondSingleApex = (inputBuff.indexOf("’", i) > -1 ? inputBuff.indexOf("’", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfWordSecondSingleApex)); int nextOccurenceOfEgrave = (inputBuff.toString().indexOf("è", i) > -1 ? inputBuff.toString().indexOf("è", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfEgrave)); int nextOccurenceOfEacute = (inputBuff.toString().indexOf("é", i) > -1 ? inputBuff.toString().indexOf("é", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfEacute)); int nextOccurenceOfAgrave = (inputBuff.toString().indexOf("à", i) > -1 ? inputBuff.toString().indexOf("à", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfAgrave)); int nextOccurenceOfOgrave = (inputBuff.toString().indexOf("ò", i) > -1 ? inputBuff.toString().indexOf("ò", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfOgrave)); int nextOccurenceOfUgrave = (inputBuff.toString().indexOf("ù", i) > -1 ? inputBuff.toString().indexOf("ù", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfUgrave)); int nextOccurenceOfIgrave = (inputBuff.toString().indexOf("ì", i) > -1 ? inputBuff.toString().indexOf("ì", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfIgrave)); int cursor = getMinValue(ints); if (cursor == Integer.MAX_VALUE) { outputBuff.append(inputBuff.substring(i)); break; } else { outputBuff.append(inputBuff.substring(i, cursor)); i = cursor; if (nextOccurenceOfWordFirstDoubleApex == cursor) { outputBuff.append('"'); i = i + 7; } else if (nextOccurenceOfWordSecondDoubleApex == cursor) { outputBuff.append('"'); i = i + 7; } else if (nextOccurenceOfCR == cursor) { outputBuff.append("\r\n"); i = i + 4; } else if (nextOccurenceOfSingleApex == cursor) { outputBuff.append('\''); i = i + 7; } else if (nextOccurenceOfAccent == cursor) { outputBuff.append('\''); i = i + 5; } /* else if (nextOccurenceOfDoubleApex == cursor) { outputBuff.append('\"'); i = i + 6; } else if (nextOccurenceOfWordFirstSingleApex == cursor) { outputBuff.append('\''); i = i + 7; } else if (nextOccurenceOfWordSecondSingleApex == cursor) { outputBuff.append('\''); i = i + 7; } else if (nextOccurenceOfEgrave == cursor) { // è è outputBuff.append('�'); i = i + 6; } else if (nextOccurenceOfEacute == cursor) { outputBuff.append('�'); i = i + 6; } else if (nextOccurenceOfAgrave == cursor) { outputBuff.append('�'); i = i + 6; } else if (nextOccurenceOfOgrave == cursor) { outputBuff.append('�'); i = i + 6; } else if (nextOccurenceOfUgrave == cursor) { outputBuff.append('�'); i = i + 6; } else if (nextOccurenceOfIgrave == cursor) { outputBuff.append('�'); i = i + 6; } */ } } } return outputBuff.toString(); } /** * input is a html encoded string; returns a decoded rtf string * * @param input */ public static String rtfFormattedString(String input) { if (input == null) return ""; StringBuffer inputBuff = new StringBuffer(input); StringBuffer outputBuff = new StringBuffer(512); int i = 0; if (inputBuff != null && inputBuff.length() > 0) { while (i < inputBuff.length()) { //collects first occurrences of characters to be encoded Collection ints = new HashSet(); int nextOccurenceOfWordFirstDoubleApex = (inputBuff.indexOf("“", i) > -1 ? inputBuff.indexOf("“", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfWordFirstDoubleApex)); int nextOccurenceOfWordSecondDoubleApex = (inputBuff.indexOf("”", i) > -1 ? inputBuff.indexOf("”", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfWordSecondDoubleApex)); int nextOccurenceOfCR = (inputBuff.indexOf("<br>", i) > -1 ? inputBuff.indexOf("<br>", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfCR)); int nextOccurenceOfSingleApex = (inputBuff.indexOf("’", i) > -1 ? inputBuff.indexOf("’", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfSingleApex)); int nextOccurenceOfDoubleApex = (inputBuff.indexOf(""", i) > -1 ? inputBuff.indexOf(""", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfDoubleApex)); int nextOccurenceOfWordFirstSingleApex = (inputBuff.indexOf("‘", i) > -1 ? inputBuff.indexOf("‘", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfWordFirstSingleApex)); int nextOccurenceOfWordSecondSingleApex = (inputBuff.indexOf("’", i) > -1 ? inputBuff.indexOf("’", i) : Integer.MAX_VALUE); ints.add(new Integer(nextOccurenceOfWordSecondSingleApex)); int cursor = getMinValue(ints); if (cursor == Integer.MAX_VALUE) { outputBuff.append(inputBuff.substring(i)); break; } else { outputBuff.append(inputBuff.substring(i, cursor)); i = cursor; if (nextOccurenceOfWordFirstDoubleApex == cursor) { outputBuff.append('\"'); i = i + 7; } else if (nextOccurenceOfWordSecondDoubleApex == cursor) { outputBuff.append('\"'); i = i + 7; } else if (nextOccurenceOfCR == cursor) { outputBuff.append("\r\n"); i = i + 4; } else if (nextOccurenceOfSingleApex == cursor) { outputBuff.append('\''); i = i + 7; } else if (nextOccurenceOfDoubleApex == cursor) { outputBuff.append('\"'); i = i + 6; } else if (nextOccurenceOfWordFirstSingleApex == cursor) { outputBuff.append('\''); i = i + 7; } else if (nextOccurenceOfWordSecondSingleApex == cursor) { outputBuff.append('\''); i = i + 7; } } } } return outputBuff.toString(); } public static int getMinValue(Collection ints) { int result = Integer.MAX_VALUE; for (Iterator iterator = ints.iterator(); iterator.hasNext();) { int i = ((Integer) iterator.next()).intValue(); if (i < result) result = i; } return result; } public static final String removeBadCharsFromJSConstant(String source) { if (source != null) return StringUtilities.replaceAllNoRegex(source, new String[]{"\"", "'"}, new String[]{"\\\"", "\\'"}); else return ""; } public static String stripHtmlTag(String html) { return html.replaceAll("</?[\\width]+[^<>]*>", ""); } }