/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code 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 General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.hotspot.igv.util; /** * * @author tkrodrig */ public class StringUtils { public static String escapeHTML(String s) { StringBuilder str = null; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); switch (c) { case '&': case '<': case '>': case '"': case '\'': if (str == null) { str = new StringBuilder(); str.append(s, 0, i); } switch (c) { case '&': str.append("&"); break; case '<': str.append("<"); break; case '>': str.append(">"); break; case '"': str.append("""); break; case '\'': str.append("'"); break; default: assert false; } break; case '\u0000': case '\u0001': case '\u0002': case '\u0003': case '\u0004': case '\u0005': case '\u0006': case '\u0007': case '\u0008': case '\u000b': case '\u000c': case '\u000e': case '\u000f': case '\u0010': case '\u0011': case '\u0012': case '\u0013': case '\u0014': case '\u0015': case '\u0016': case '\u0017': case '\u0018': case '\u0019': case '\u001a': case '\u001b': case '\u001c': case '\u001d': case '\u001e': case '\u001f': if (str == null) { str = new StringBuilder(); str.append(s, 0, i); } str.append("'0x").append(Integer.toHexString(c)); break; default: if (str != null) { str.append(c); } break; } } if (str == null) { return s; } else { return str.toString(); } } }