Der Martin: PHP-/HTML-Zeichen-Problem

Beitrag lesen

Hallo,

Gibt es eine Möglichkeit, dass die Zeichen wie &#8222 korrekt ausgegeben werden.
Ja das kann viele Ursachen haben. &8222; nennt man einen Entity.

das ist nicht ganz korrekt; Entity-Referenzen sind etwa ö oder   - also die benannten Zeichen. Was wir hier haben, ist eine numerische Zeichenreferenz (NCR), die noch dazu ungewohnt in dezimal formuliert ist. Normalerweise würde man das als &x201E; formulieren, weil Unicode-Zeichencodes gewöhnlich in hexadezimal angegeben werden.

So, damit erstmal genug von den Korinthen.

Wie Tom schon erklärt hat muss ein Entity immer mit einem &-Zeichen beginnen und mit einem Semikolon enden.

Das Semikolon gehört zwar hin, aber die interne Fehlerkorrektur der Browser kommt meistens gut damit zurecht, wenn es fehlt - außer wenn dadurch eine Fehlinterpretation droht. So würde etwa das Fragment "paste&copy" als "paste©" interpretiert.

Was pto hier aber schildert, ist widersprüchlich. Er sagt, dass &#8222 (ohne Semikolon) im Quelltext steht, den er angeliefert bekommt. Wenn seine Quelle die nicht-ASCII-Zeichen immer als NCRs liefert, wäre aber der Aufruf von utf8_decode() völlig sinnlos.
Wenn im fertig aufbereiteten String aber ein Fragezeichen steht, ist das ein Zeichen dafür, dass eine Umwandlung von UTF-8 in eine andere Codierung Verlust produziert hat - mit anderen Worten: Der Originaltext etnhielt ein Zeichen, das in der gewünschten Ziel-Codierung nicht existiert, daher wird an der Stelle ein Fragezeichen eingesetzt. Es scheint also eher so, dass in seinem Quell-String nicht &x8222 auftaucht, sondern das damit umschriebene Zeichen im Klartext (was ja auch sinnvoll wäre).

Am einfachsten wäre es du notierst das „-Zeichen ganz gewöhnlich im Text.

... und gibst das alles wieder als UTF-8 aus, so dass die verlustbehaftete Umwandlung nicht nötig ist.

Ciao,
 Martin

--
F: Wer waren die ersten modernen Politiker?
A: Die Heiligen drei Könige. Sie legten die Arbeit nieder, zogen teure Klamotten an und gingen auf Reisen.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(