Ich arbeite gerade an einer Funktion mit der man String, die mit PHP htmlentities() Funktion Umgewandelt worden sind:
Rauml;tsel
zurück zu wandeln in
Rätsel
weil jemand die Werte so in die Datenbank gespeichert hat, wahrscheinlich ich 🙂
Dazu hab ich die folgende Funktion gebaut, die mir komischerweise ein Array durchläuft, dass nicht die Werte beinhaltet, die man erwarten würde:
HtmlEntitesReplacer::displayHtmlEntities(); class HtmlEntitesReplacer { public static function displayHtmlEntities() { $i = 0; $umlaute = HtmlEntitesReplacer::getUmlauteArray(); echo "Das Umlaute Array hat ".count($umlaute)." Werte<br>"; foreach($umlaute as $umlautFalsch =>$umlaut) { $htmlEnties = str_replace("&", "&amp;",htmlentities($umlaut)); echo "$i) $umlautFalsch <=> $htmlEnties' <=> $umlaut <br> "; $i++; } die(); } private function getUmlauteArray() { return array( 'ü'=>'ü', 'ä'=>'ä', 'ö'=>'ö', 'Ö'=>'Ö', 'ß'=>'ß', 'à '=>'à', 'á'=>'á', 'â'=>'â', 'ã'=>'ã', 'ù'=>'ù', 'ú'=>'ú', 'û'=>'û', 'Ù'=>'Ù', 'Ú'=>'Ú', 'Û'=>'Û', 'Ãœ'=>'Ü', 'ò'=>'ò', 'ó'=>'ó', 'ô'=>'ô', 'è'=>'è', 'é'=>'é', 'ê'=>'ê', 'ë'=>'ë', 'À'=>'À', 'Ã'=>'Á', 'Â'=>'Â', 'Ã'=>'Ã', 'Ä'=>'Ä', 'Ã…'=>'Å', 'Ç'=>'Ç', 'È'=>'È', 'É'=>'É', 'Ê'=>'Ê', 'Ë'=>'Ë', 'ÃŒ'=>'Ì', 'Ã'=>'Í', 'ÃŽ'=>'Î', 'Ã'=>'Ï', 'Ñ'=>'Ñ', 'Ã’'=>'Ò', 'Ó'=>'Ó', 'Ô'=>'Ô', 'Õ'=>'Õ', 'Ø'=>'Ø', 'Ã¥'=>'å', 'æ'=>'æ', 'ç'=>'ç', 'ì'=>'ì', 'Ã'=>'í', 'î'=>'î', 'ï'=>'ï', 'ð'=>'ð', 'ñ'=>'ñ', 'õ'=>'õ', 'ø'=>'ø', 'ý'=>'ý', 'ÿ'=>'ÿ', '€'=>'€' ); }
kommt bei der Ausgabe nur auf i=34, obwohl es 57 Sonderzeichen von der Methode getUmlauteArray() zurückgegeben werden.
Ausgabe:
Das Umlaute Array hat 35 Werte 0) ü <=> &uuml;' <=> ü 1) ä <=> &auml;' <=> ä 2) ö <=> &ouml;' <=> ö 3) Ã? <=> &Oslash;' <=> Ø 4) à <=> &agrave;' <=> à 5) á <=> &aacute;' <=> á 6) â <=> &acirc;' <=> â 7) ã <=> &atilde;' <=> ã 8) ù <=> &ugrave;' <=> ù 9) ú <=> &uacute;' <=> ú 10) û <=> &ucirc;' <=> û 11) ò <=> &ograve;' <=> ò 12) ó <=> &oacute;' <=> ó 13) ô <=> &ocirc;' <=> ô 14) è <=> &egrave;' <=> è 15) é <=> &eacute;' <=> é 16) ê <=> &ecirc;' <=> ê 17) ë <=> &euml;' <=> ë 18) à <=> &Aacute;' <=> Á 19) à <=> &Iacute;' <=> Í 20) à <=> &Iuml;' <=> Ï 21) Ã¥ <=> &aring;' <=> å 22) æ <=> &aelig;' <=> æ 23) ç <=> &ccedil;' <=> ç 24) ì <=> &igrave;' <=> ì 25) à <=> &iacute;' <=> í 26) î <=> &icirc;' <=> î 27) ï <=> &iuml;' <=> ï 28) ð <=> &eth;' <=> ð 29) ñ <=> &ntilde;' <=> ñ 30) õ <=> &otilde;' <=> õ 31) ø <=> &oslash;' <=> ø 32) ý <=> &yacute;' <=> ý 33) ÿ <=> &yuml;' <=> ÿ 34) â?¬ <=> ?' <=> ?
Update 1:
Der gute Kommentar von Chris (vielen Dank), hat mich auf die Idee gebracht zu schauen, welche Werte als Array Key zugelassen sind (php.net):
The key can either be an integer or a string. The value can be of any type.
Also bei String nachgeschaut… und nichts gefunden…
Ich verwende PHP 5.2.8 und mein Projekt ist iso-codiert.
Ich habe zur Hilfe mal die markiert, die nicht ungezeigt werden. Dabei fällt auf, dass nur Großbuchstaben Array-Values betroffen sind.
return array( 'ü'=>'ü', 'ä'=>'ä', 'ö'=>'ö', 'Ö'=>'Ö',missing 'ß'=>'ß', 'à '=>'à', 'á'=>'á', 'â'=>'â', 'ã'=>'ã', 'ù'=>'ù', 'ú'=>'ú', 'û'=>'û', 'Ù'=>'Ù',missing 'Ú'=>'Ú',missing 'Û'=>'Û',missing 'Ãœ'=>'Ü',missing 'ò'=>'ò', 'ó'=>'ó', 'ô'=>'ô', 'è'=>'è', 'é'=>'é', 'ê'=>'ê', 'ë'=>'ë', 'À'=>'À',missing 'Ã'=>'Á', 'Â'=>'Â',missing 'Ã'=>'Ã',missing 'Ä'=>'Ä',missing 'Ã…'=>'Å',missing 'Ç'=>'Ç',missing 'È'=>'È',missing 'É'=>'É',missing 'Ê'=>'Ê',missing 'Ë'=>'Ë',missing 'ÃŒ'=>'Ì',missing 'Ã'=>'Í', 'ÃŽ'=>'Î',missing 'Ã'=>'Ï', 'Ñ'=>'Ñ',missing 'Ã’'=>'Ò',missing 'Ó'=>'Ó',missing 'Ô'=>'Ô',missing 'Õ'=>'Õ',missing 'Ø'=>'Ø',missing 'Ã¥'=>'å', 'æ'=>'æ', 'ç'=>'ç', 'ì'=>'ì', 'Ã'=>'í', 'î'=>'î', 'ï'=>'ï', 'ð'=>'ð', 'ñ'=>'ñ', 'õ'=>'õ', 'ø'=>'ø', 'ý'=>'ý', 'ÿ'=>'ÿ', '€'=>'€' );
UPDATE 2:LÖSUNG
Mein Datei war ISO codiert und hat deswegen die fehlenden Umlaute als „Ã?“ dargestellt. Das Script funktioniert also nur mit einer UTF8 Codierung.