All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.myfaces.renderkit.html.util.HTMLEncoder Maven / Gradle / Ivy

Go to download

The MyFaces Commons Subproject provides base classes for usage in both the MyFaces implementation and the MyFaces Tomahawk components. This is also a general set of utility classes for usage in your JSF projects independent of the implementation you might be deciding upon.

The newest version!
/*
 * Copyright 2004 The Apache Software Foundation.
 * 
 * Licensed 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 org.apache.myfaces.renderkit.html.util;




/**
 * Converts Strings so that they can be used within HTML-Code.
 */
public abstract class HTMLEncoder
{
	/**
	 * Variant of {@link #encode} where encodeNewline is false and encodeNbsp is true.
	 */
	public static String encode (String string)
	{
		return encode(string, false, true);
	}

	/**
	 * Variant of {@link #encode} where encodeNbsp is true.
	 */
	public static String encode (String string, boolean encodeNewline)
	{
		return encode(string, encodeNewline, true);
	}

	/**
	 * Variant of {@link #encode} where encodeNbsp and encodeNonLatin are true 
	 */
	public static String encode (String string, boolean encodeNewline, boolean encodeSubsequentBlanksToNbsp)
	{
		return encode(string, encodeNewline, true, true);
	}

	/**
	 * Encodes the given string, so that it can be used within a html page.
	 * @param string the string to convert
	 * @param encodeNewline if true newline characters are converted to <br>'s
	 * @param encodeSubsequentBlanksToNbsp if true subsequent blanks are converted to &nbsp;'s
	 * @param encodeNonLatin if true encode non-latin characters as numeric character references
	 */
	public static String encode (String string,
								 boolean encodeNewline,
								 boolean encodeSubsequentBlanksToNbsp,
								 boolean encodeNonLatin)
	{
		if (string == null)
		{
			return "";
		}

		StringBuffer sb = null;	//create later on demand
		String app;
		char c;
		for (int i = 0; i < string.length (); ++i)
		{
			app = null;
			c = string.charAt(i);
			switch (c)
			{
                case '"': app = """; break;    //"
                case '&': app = "&"; break;     //&
                case '<': app = "<"; break;      //<
                case '>': app = ">"; break;      //>
                case ' ':
                    if (encodeSubsequentBlanksToNbsp &&
                        (i == 0 || (i - 1 >= 0 && string.charAt(i - 1) == ' ')))
                    {
                        //Space at beginning or after another space
                        app = " ";
                    }
                    break;
                case '\n':
                    if (encodeNewline)
                    {
                        app = "
"; } break; default: if (encodeNonLatin) switch(c) { //german umlauts case '\u00E4' : app = "ä"; break; case '\u00C4' : app = "Ä"; break; case '\u00F6' : app = "ö"; break; case '\u00D6' : app = "Ö"; break; case '\u00FC' : app = "ü"; break; case '\u00DC' : app = "Ü"; break; case '\u00DF' : app = "ß"; break; //misc //case 0x80: app = "€"; break; sometimes euro symbol is ascii 128, should we suport it? case '\u20AC': app = "€"; break; case '\u00AB': app = "«"; break; case '\u00BB': app = "»"; break; case '\u00A0': app = " "; break; default : if (((int)c) >= 0x80) { //encode all non basic latin characters app = "&#" + ((int)c) + ";"; } break; } break; } if (app != null) { if (sb == null) { sb = new StringBuffer(string.substring(0, i)); } sb.append(app); } else { if (sb != null) { sb.append(c); } } } if (sb == null) { return string; } else { return sb.toString(); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy