/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.todoroo.astrid.utility; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; /** * <p>Escapes and unescapes <code>String</code>s for * Java, Java Script, HTML, XML, and SQL.</p> * * @author Apache Jakarta Turbine * @author Purple Technology * @author <a href="mailto:alex@purpletech.com">Alexander Day Chaffee</a> * @author Antony Riley * @author Helge Tesgaard * @author <a href="sean@boohai.com">Sean Brown</a> * @author <a href="mailto:ggregory@seagullsw.com">Gary Gregory</a> * @author Phil Steitz * @author Pete Gieser * @since 2.0 * @version $Id: StringEscapeUtils.java 2696 2007-06-20 13:24:53Z damencho $ */ @SuppressWarnings({"nls"}) public class StringEscapeUtils { /** * <p><code>StringEscapeUtils</code> instances should NOT be constructed in * standard programming.</p> * * <p>Instead, the class should be used as: * <pre>StringEscapeUtils.escapeJava("foo");</pre></p> * * <p>This constructor is public to permit tools that require a JavaBean * instance to operate.</p> */ public StringEscapeUtils() { super(); } //----------------------------------------------------------------------- /** * <p>Unescapes a string containing entity escapes to a string * containing the actual Unicode characters corresponding to the * escapes. Supports HTML 4.0 entities.</p> * * <p>For example, the string "&lt;Fran&ccedil;ais&gt;" * will become "<Français>"</p> * * <p>If an entity is unrecognized, it is left alone, and inserted * verbatim into the result string. e.g. "&gt;&zzzz;x" will * become ">&zzzz;x".</p> * * @param str the <code>String</code> to unescape, may be null * @return a new unescaped <code>String</code>, <code>null</code> if null string input * @see #escapeHtml(Writer, String) */ public static String unescapeHtml(String str) { if (str == null) { return null; } try { StringWriter writer = new StringWriter ((int)(str.length() * 1.5)); unescapeHtml(writer, str); return writer.toString(); } catch (IOException e) { //assert false; //should be impossible e.printStackTrace(); return null; } } /** * <p>Unescapes a string containing entity escapes to a string * containing the actual Unicode characters corresponding to the * escapes. Supports HTML 4.0 entities.</p> * * <p>For example, the string "&lt;Fran&ccedil;ais&gt;" * will become "<Français>"</p> * * <p>If an entity is unrecognized, it is left alone, and inserted * verbatim into the result string. e.g. "&gt;&zzzz;x" will * become ">&zzzz;x".</p> * * @param writer the writer receiving the unescaped string, not null * @param string the <code>String</code> to unescape, may be null * @throws IllegalArgumentException if the writer is null * @throws IOException if an IOException occurs * @see #escapeHtml(String) */ public static void unescapeHtml(Writer writer, String string) throws IOException { if (writer == null ) { throw new IllegalArgumentException ("The Writer must not be null."); } if (string == null) { return; } Entities.HTML40.unescape(writer, string); } }