PHP/HTML-Sonderzeichen mit "get html translation table" bearbeiten

Aus Mikiwiki
< PHP
Version vom 24. Januar 2009, 22:26 Uhr von Michi (Diskussion | Beiträge) (Die Seite wurde neu angelegt: Die Funktionen "htmlspecialchars" und "htmlentities" basieren auf einer internen Tabelle, der sogenannten HTML-Translationtable. Jede Funktion verwendet dabei einen...)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Die Funktionen "htmlspecialchars" und "htmlentities" basieren auf einer internen Tabelle, der sogenannten HTML-Translationtable. Jede Funktion verwendet dabei einen eigenen Satz von Vergleichswerten, die wie ein assoziatives Array angeordnet sind.

Auch die Funktion "strtr" nimmt Umsetzungen von Werten vor. Normalerweise wird ein Array erwartet, das die umzuwandelnden Werte enthält. Wird nun die HTML-Tabelle mit der Funktion "get_html_translation_table" ermittelt, so kann das resultierende Array erweitert und auf "strtr" angewendet werden. So wird eine Erweiterung der internen Umwandlungsmöglichkeiten vereinfacht.

Die Funktionen "htmlspecialchars" und "htmlentities" haben keine Umkehrfunktion. Das kann aber simuliert werden, wenn die Richtung der Vergleichstabelle umgedreht wird. Als "Drehfunktion" kommt dann die Funktion "array_flip" zum Einsatz.

<?php
function ret_entities($html) 
{
  $translation = get_html_translation_table(HTML_ENTITIES);
  $translation = array_flip($translation);
  return strtr($html, $translation);
}
$coded = "Ein Kn&ouml;tchen im B&ouml;hnchen...";
echo "Original: " . htmlspecialchars($coded) . "br />\n";
echo "Ursprung: " . ret_entities($coded)     . "br />\n";
?>

Original: Ein Knötchen im Böhnchen...
Ursprung: Ein Knötchen im Böhnchen...

Im Quelltext der entstehenden Seite kann nachgeprüft werden, dass hier tatsächlich keine HTML-Symbole verwendet werden, sondern die Zeichen des originalen Zeichensatzes.