Umlaute: seltsam Codierung

Veränderung

Erfahrenes Mitglied
Bei dem Versuch, aus externen Seiten den Title-Tag zu ziehen, erhalte ich von YouTube folgenden String:

10 ungelo?ste Geheimnisse u?ber dein Gehirn - YouTube

Hier im Forum wird der String wieder anders dargestellt, die Punkte über den Umlauten sind verrutscht.
Auf jeden Fall kommen die Umlaute sehr klein im Editor an, wenn ich sie umkopiere. Gebe ich selbst welche ein, erscheinen sie normal. Beim Umkopieren in andere HTML-Felder sehen sie oft normal aus, beim Entfernen des Zeichens wandelt es sich beim ersten Backshift in das Zeichen ohne Punkte um (ü wird zu u), beim erneuten Backshift verschwindet es.
Speicher ich den String in einer Datenbank, kommen Fragezeichen dabei heraus (Zeichensatz latin1_german1_ci), obwohl sonst Umlaute gespeichert werden.

Was ist das für eine seltsame Form der Umlaute?

Hier der verwendete PHP-Code:
PHP:
function getTextBetweenTags($string, $tagname)
	 {
	    $pattern = "/<$tagname>(.*?)<\/$tagname>/";
	    preg_match($pattern, $string, $matches);
	    return $matches[1];
	 }

$file=file_get_contents("https://www.youtube.com/watch?v=ObedlBKJTXQ");
$titel = getTextBetweenTags($file,'title');
		 echo $titel;

Danke im Voraus!
 

Anhänge

  • umlaute.jpg
    umlaute.jpg
    21,4 KB · Aufrufe: 10

sheel

I love Asm
Hi

Zuerst einmal ist das kein latin1_german1_ci, sondern etwas Unicode-mäßiges, zB. UTF-8.
(latin_xy ganz loszuwerden und nur noch Unicode zu verwenden schadet in 99.99% der Fälle nicht)

So ein Zeichensatz ist ja dazu da, um Nummern im Computer sichtbare Buchstaben zuzuordnen,
einfach gesagt. Eines der Hürden mit Unicode ist, dass es für ein sichtbare Ding mehrere
Nummern(-kombinationen) geben kann (und in vielen Fällen auch gibt).

Am Beispiel vom "ö" hier:
Es gibt ein Nummer bzw. ein Zeichen für ein normales o ohne Punkte oben,
es gibt ein Zeichen für ö,
und eine Sondernummer/zeichen, das allein nach gar nichts ausschaut,
sondern dem jeweils vorigen Zeichen zwei Punkte oben verpasst (egal ob a o u oder sonstwas)

Ein sichtbares ö kann also entweder wirklich "ö" oder "o plus Punkte-hinzufüger" sein
(und ich bin mir sehr sicher, dass es noch weitere Möglichkeiten gibt).

Wenn alle Programme ordentlich funktionieren würden wäre das überhaupt kein Problem,
alle würden wie ö ausschauen. Der Windows-Editor ist in dem Punkt aber einfach schlecht
und schaffts nicht (hab nichts gegen Windows, aber der Editor ist wirklich Mist)
Und hier im Forum gibts wohl ein Problem mit der verwendeten Schriftart.

Lösungsmöglichkeiten:
a) Windows-Editor ignorieren und bei deiner Seite eine Schrift verwenden, die kein Problem hat

b) Rein theoretisch könnte man alle ungewöhnliche Unicodezeichen durch üblichere ersetzen,
bevor man mit den Daten weitermacht. Allerdings gibt es keine einfachen Regeln,
welche Nummern zu welchen anderen passen, sondern nur sehr lange Listen.
Bzw., programmiermäßig gibts fertige Libraries,
damit man das nicht selbst alles implementieren muss.
Siehe Icu bzw. http://www.php.net/manual/en/intro.intl.php
Stichwort Unicode-Normalisierung

Empfehle Lösung a, wenn es keinen wirklichen Grund für b gibt.
Ist nämlich viel einfacher.