001    /*
002     @license.text@ 
003     */
004    package biz.hammurapi.util;
005    
006    
007    /**
008     * Helper class to render ${...} sequence in Velocity and
009     * encode URL's.
010     * @author Pavel
011     */
012    public class Escaper {
013            
014            /**
015             * Escapes HTML
016             * @param tkn
017             * @return
018             */
019            public static String escapeHtml(String txt) {
020                    if (txt==null) {
021                            return null;
022                    }
023                    
024                    StringBuffer ret = new StringBuffer();
025                    char[] chars=txt.toCharArray();
026                    for (int i=0; i<chars.length; ++i) {
027                            switch (chars[i]) {
028                            case '<':
029                                    ret.append("&lt;");
030                                    break;
031                            case '>':
032                                    ret.append("&gt;");
033                                    break;
034                            case '&':
035                                    if (i<chars.length-1 && '#'==chars[i+1]) { // Do not double-escape (&#...;)
036                                            ret.append(chars[i]);
037                                    } else {
038                                            ret.append("&amp;");
039                                    }
040                                    break;
041                            case '\'':
042                                    ret.append("&#039;");
043                                    break;
044                            case '\\':
045                                    ret.append("&#092;");
046                                    break;
047                            case '\"':
048                                    ret.append("&quot;");
049                                    break;
050                            default:
051                                    ret.append("&#"+((int) chars[i])+";");
052                            }
053                    }
054                    return ret.toString();
055            }
056            
057    }