# HTML Entities in Zeichen umwandeln



## Thomas Darimont (29. März 2007)

Hallo,

schaut mal hier:

```
/**
 * 
 */
package de.tutorials;

import java.util.Properties;

/**
 * @author thomas.darimont
 * 
 */
public class HTMLEntityTranslationExample {
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Properties properties = new Properties();

        // Findet man im resources.jar Beispielsweise unter:
        // c:\Programme\Java\jdk1.6.0\jre\lib\resources.jar
        properties
                .load(HTMLEntityTranslationExample.class
                        .getClassLoader()
                        .getResourceAsStream(
                                "com/sun/org/apache/xml/internal/serializer/HTMLEntities.properties"));

        char charValue = (char) Integer.parseInt((String) properties
                .get("auml"));
        System.out.println(charValue);

        charValue = (char) Integer.parseInt((String) properties.get("aring"));
        System.out.println((char) charValue);
    }
}
```

Ausgabe:

```
ä
å
```

Gruß Tom


----------



## Billie (29. März 2007)

Hellas Thomas!

Kannst du mir dann eigentlich auch mit meiner Frage im J2EE Forum weiterhelfen? Ich programmiere immer noch recht viel in PHP und da gibt es diese nette Funktion htmlspecialchars. 

Es muss doch etwas ähnliches auch standardmäßig in JSP geben, oder? Evtl. auch irgendein JSP-Tag, das mir unbekannt ist?

lg Billie


----------



## Thomas Darimont (29. März 2007)

Hallo,

schau mal hier:

```
/**
 * 
 */
package de.tutorials;

import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Map.Entry;

/**
 * @author thomas.darimont
 * 
 */
public class HtmlUtilExample {

	final static Map<String, String> CHARACTER_TO_ENTITY_MAP;
	final static Map<String, String> ENTITY_TO_CHARACTER_MAP;

	static {
		Map<String, String> characterToEntityMap = new HashMap<String, String>();
		Map<String, String> entityToCharacterMap = new HashMap<String, String>();

		Properties properties = new Properties();
		// Findet man im resources.jar Beispielsweise unter:
		// c:\Programme\Java\jdk1.6.0\jre\lib\resources.jar

		String path = "com/sun/org/apache/xml/internal/serializer/HTMLEntities.properties";

		try {
			properties.load(HtmlUtilExample.class.getClassLoader()
					.getResourceAsStream(path));

			for (Entry<Object, Object> entry : properties.entrySet()) {
				String characterValue = String.valueOf((char) Integer
						.parseInt((String) entry.getValue()));
				register(entityToCharacterMap, characterToEntityMap,
						(String) entry.getKey(), characterValue);

			}

			register(entityToCharacterMap, characterToEntityMap, "#039", "'");
			register(entityToCharacterMap, characterToEntityMap, "nbsp", " ");

			ENTITY_TO_CHARACTER_MAP = Collections
					.unmodifiableMap(entityToCharacterMap);
			CHARACTER_TO_ENTITY_MAP = Collections
					.unmodifiableMap(characterToEntityMap);

		} catch (IOException e) {
			throw new Error("HTMLEntityData not found: " + path);
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		System.out.println(ENTITY_TO_CHARACTER_MAP.get("auml"));
		System.out.println(ENTITY_TO_CHARACTER_MAP.get("acirc"));
		System.out.println(ENTITY_TO_CHARACTER_MAP.get("aring"));
		System.out.println(ENTITY_TO_CHARACTER_MAP.get("Ocirc"));
		System.out
				.println(escapeHtmlSpecialChars("<a href='test?a=1&b=2'>Test   €   </a>"));
	}

	private static void register(Map<String, String> entityToCharacterMap,
			Map<String, String> characterToEntityMap, String entity,
			String characterValue) {
		entityToCharacterMap.put(entity, characterValue);
		characterToEntityMap.put(characterValue, entity);

	}

	public static String escapeHtmlSpecialChars(String htmlString) {
		StringBuilder stringBuilder = new StringBuilder();

		for (char c : htmlString.toCharArray()) {
			String characterString = String.valueOf(c);
			if (isHtmlSpecialCharacter(c)) {
				stringBuilder.append("&");
				stringBuilder.append(CHARACTER_TO_ENTITY_MAP
						.get(characterString));
				stringBuilder.append(";");
			} else {
				stringBuilder.append(c);
			}
		}

		return stringBuilder.toString();
	}

	private static boolean isHtmlSpecialCharacter(char c) {
		return CHARACTER_TO_ENTITY_MAP.containsKey(String.valueOf(c))
				|| c < ' ';
	}

}
```

Sowas findet man aber sicherlich auch in den Jakarta Commons.

Gruß Tom


----------

