Fehlerhafte Ausgabe der Entities - Ursache?

KeinKommentar

Stolzer Webbi :-)
ID: 8090
L
13 Juni 2006
2.077
190
Was man sich und / oder anderen beschreibt / erklärt / verdeutlicht, begreift man möglicherweise auch eher...

Nach dem Einsatz von mod_rewrite und den dafür notwendigen Änderungen im PHP-Script gibt es plötzlich massive Probleme mit Umlauten und Sonderzeichen, die vorher nicht aufgetreten sind. Umlaute werden im Browser fehlerhaft wiedergegeben (zumindest im FF) und der entsprechende Datensatz überhaupt nicht.

Beispiel:

https://www.redensarten.net/abknöpfen.html

Die Ersetzung der Umlaute/ Sonderzeichen kann ich auch keinem Zeichensatz zuordnen.

Habe ich die Angabe des jeweiligen Zeichensatzes nicht ernst genug genommen, soll ich lieber statt der Umlaute Code verwenden (ä
bzw. ä usw.) oder liegt es eher am Script (Link-Generierung)?

Und bei der Gelegenheit: Lieber html-Entities oder UTF-8?
 
Zuletzt bearbeitet:
KeinKommentar schrieb:
Was man sich und / oder anderen beschreibt / erklärt / verdeutlicht, begreift man möglicherweise auch eher...

Nach dem Einsatz von mod_rewrite und den dafür notwendigen Änderungen im PHP-Script gibt es plötzlich massive Probleme mit Umlauten und Sonderzeichen, die vorher nicht aufgetreten sind. Und "witziger"weise handeln IE und FF das Ganze völlig unterschiedlich, was mir Laien die Sache nicht unbedingt erleichtert...

Beispiel:

Linkausgabe IE:

https://www.redensarten.net/abknöpfen.html

Umlaut im Browser richtig dargestellt (zumindest optisch), aber Content nicht aus der Datenbank gelesen.

Linkausgabe FF:

https://www.redensarten.net/abkn%F6pfen.html

Umlaut fehlerhaft (zumindest im Verhältnis zu meinen Absichten :mrgreen: ), aber Content vorhanden.

(Diese Link-Version frißt auch der IE.)

Die Ersetzung der Umlaute/ Sonderzeichen kann ich auch keinem Zeichensatz zuordnen.

https://www.redensarten.net/Arsch lecken.html (Leerzeichen)
https://www.redensarten.net/X%20f%FCr%20ein%20U.html (Leerzeichen und Ü)
usw.

Habe ich die Angabe des jeweiligen Zeichensatzes nicht ernst genug genommen, soll ich lieber statt der Umlaute Code verwenden (ä
bzw. ä usw.) oder liegt es eher am Script (Link-Generierung)?

Und bei der Gelegenheit: Lieber html-Entities oder UTF-8?

Das sind einfach nur die entsprechenden "Html-Codes" für die Sonderzeichen...

Siehe auch https://de.php.net/manual/de/function.htmlentities.php

EDIT: Dass der IE das Sonderzeichen nicht umwandelt zeigt btw. nur wieder, dass M$ es nicht schafft ihren Browser html-konform zu machen
 
Das will ich nicht mal sagen, wenn ich das richtig verstanden habe sagt der Standard, wandels nach Unicode um und kodiere es dann. IE scheint das offensichtlich zu tun, FF nicht (?). Komisch ist nur, dass PHP das nicht dekodiert... Bei $_GET etc ist das ja eig. zu erwarten (und müsste auch so gemacht werden)
 
bartman schrieb:
Das will ich nicht mal sagen, wenn ich das richtig verstanden habe sagt der Standard, wandels nach Unicode um und kodiere es dann. IE scheint das offensichtlich zu tun, FF nicht (?). Komisch ist nur, dass PHP das nicht dekodiert... Bei $_GET etc ist das ja eig. zu erwarten (und müsste auch so gemacht werden)

Ne, es ist genau anders herum... Der IE tuts nicht, der FF schon. Um das umzuwandeln gibts extra ne funktion ;)
 
Hm, habe in der Datenbank an der Stelle, an der das Script den entsprechenden Datensatz abruft, "abknöpfen" in "abkn&.#246;pfen" geändert (ohne den Punkt natürlich). Folge: Jetzt liest auch der FF den Inhalt nicht mehr aus.

btw: Würde gern mal wissen, wieso unter Kollation "latin1_swedish_ci eingestellt ist.
 
Zuletzt bearbeitet:
bartman schrieb:
-vv bitte, zeigen :)

KeinKommentar schrieb:
Linkausgabe IE:

https://www.redensarten.net/abknöpfen.html

Umlaut im Browser richtig dargestellt (zumindest optisch), aber Content nicht aus der Datenbank gelesen.

Linkausgabe FF:

https://www.redensarten.net/abkn%F6pfen.html

Der IE gibt ö aus, der FF %F6, ergo der FF wandelts um, der IE nicht ;)

Funktion zum dekodieren: https://de.php.net/manual/de/function.html-entity-decode.php
 
DJ_Freeman schrieb:
Der IE gibt ö aus, der FF %F6, ergo der FF wandelts um, der IE nicht ;)

Funktion zum dekodieren: https://de.php.net/manual/de/function.html-entity-decode.php

Sag mir lieber, wieso der das nicht in die Gegenrichtung umwandelt. Wieso der also &.#246; nicht als "ö" sondern als %F6 wiedergibt. Oder warum der - noch schlimmer - den Content nicht findet.

Eine weitere Funktion einbauen... oje... Dieser Thread sieht doch schon eindeutig so aus, als wäre ich dazu zu blöd. *loooooooooool
 
KeinKommentar schrieb:
Sag mir lieber, wieso der das nicht in die Gegenrichtung umwandelt. Wieso der also &.#246; nicht als "ö" sondern als %F6 wiedergibt. Oder warum der - noch schlimmer - den Content nicht findet.

Naja warum sollte er? Öhm wo kommt der content her? Mysql DB?
 
DJ_Freeman schrieb:
Naja warum sollte er? Öhm wo kommt der content her? Mysql DB?

Ja.

Warum er soll?

PHP:
$decodedStr .= htmlentities(utf8_decode($char2),ENT_QUOTES,'ISO-8859-1');

Sagt ihm das doch, oder?
Und die Var (in meinem Fall "wort"), die ihm sagt, welchen Artikel er anzeigen soll, habe ich mit UTF-8-Code umschrieben.

Sage ja, derartiges werde ich wohl nie raffen.
 
Ich würde sagen, die Frage sollte sich darauf beziehen, "wie kommt die Anfrage am Server an" und nicht, wie stellt es der Browser dar.

Ich denke, es wäre am besten, wenn du testest, was bei der IE Anfrage ankommt, und was beim FF ankommt. Da müssen Unterschiedliche werte ankommen, sonst würde ja bei beiden der selbe content angezeigt werden.
 
Mh, als ich mir das alles angeguckt habe wars spät, ich dachte in erinnerung zu haben dass der IE sowas wie "%C6F6" oder so erzeugt...
 
HTML:
<a href="https://www.redensarten.net/abknöpfen.html" target="_blank">https://www.redensarten.net/abknöpfen.html</a><br />

<a href="https://www.redensarten.net/abkn%F6pfen.html" target="_blank">https://www.redensarten.net/abkn%F6pfen.html</a><br />
Die funktionieren so beide. Der obere ist aber vorzuziehen.
 
Moloc schrieb:
Ich würde sagen, die Frage sollte sich darauf beziehen, "wie kommt die Anfrage am Server an" und nicht, wie stellt es der Browser dar.

Ich denke, es wäre am besten, wenn du testest, was bei der IE Anfrage ankommt, und was beim FF ankommt. Da müssen Unterschiedliche werte ankommen, sonst würde ja bei beiden der selbe content angezeigt werden.

Ist ja mittlerweile auch der Fall. Siehe Post #5. Aber ich editiere das trotzdem mal auch in Post #1, weil es sonst in der Tat schnell zu Mußverständnissen kommen kann.

Doc, yo, wenn meine Seite in html aufgezogen wäre.

Vorübergehend habe ich die Umlaute ausgeschrieben (ae, ue...) und die Leerzeichen durch Unterstrich ersetzt.
 
Zuletzt bearbeitet:
KeinKommentar schrieb:
Was man sich und / oder anderen beschreibt / erklärt / verdeutlicht, begreift man möglicherweise auch eher...

Nach dem Einsatz von mod_rewrite und den dafür notwendigen Änderungen im PHP-Script gibt es plötzlich massive Probleme mit Umlauten und Sonderzeichen, die vorher nicht aufgetreten sind. Umlaute werden im Browser fehlerhaft wiedergegeben (zumindest im FF) und der entsprechende Datensatz überhaupt nicht.

Beispiel:

https://www.redensarten.net/abknöpfen.html

Die Ersetzung der Umlaute/ Sonderzeichen kann ich auch keinem Zeichensatz zuordnen.

Die sind ISO-8859-1. In der Browserzeile dürfen keine Zeichen auftauchen, die in der ASCII-Tabelle über der 127 stehen. Diesen müssen dann maskiert werden.
F6 ist die Hexadezimalschreibweise von 246 und das 246te Zeichen ist im Zeichensatz ISO-8859-1 das kleine ö. https://unicode.e-workers.de/ansi.php

Damit du aus dem F6 wieder ein ö machen kannst musst du das Zeichen dekodieren. In PHP ist dafür die Funktion urldecode zuständig. In anderen Sprachen heißt die Funktion ähnlich.

Als Gegenstück gibt es dann noch urlencode, damit erzeugst du dann die Links, sodass jeder Browser das gleiche in der Browserzeile anzeigt.

Habe ich die Angabe des jeweiligen Zeichensatzes nicht ernst genug genommen, soll ich lieber statt der Umlaute Code verwenden (ä
bzw. ä usw.) oder liegt es eher am Script (Link-Generierung)?

Und bei der Gelegenheit: Lieber html-Entities oder UTF-8?
Htmlentities benötigt man nur, wenn man Zeichen aus einem anderen Zeichensatz darstellen möchte. Verwendest du mindestens ISO-8859-1, dann brauchst du keine Entities mehr für die deutschen Umlaute. In UTF-8 stecken noch mehr Sonderzeichen drin.

DocTrax schrieb:
Die funktionieren so beide. Der obere ist aber vorzuziehen.
Nein, die untere Schreibweise ist vorzuziehen.
 
DocTrax schrieb:
Bist Dir sicher, dass der IE mit der unteren klar kommt? (Hab keinen IE!)
Warum soll er es nicht können? Auch wenn der IE6.0 schon lange nicht mehr Stand der Rechnik ist, kann er so einfache Sachen. Es sind schließlich keine Sonderzeichen wie Umlaute oder Kaufmanns-Und drin.

Was er nicht kann, ist das automatische Umwandeln wie beim GEcko. Deswegen macht man vorher noch ein encode und dann kann es auch der IE.
 
Graccem, danke für die ausführliche und auch recht verständliche Antwort. Trotzdem gebe ich gleich auf. Es ist absolut frustrierend, daß meine Kenntnisse und auch mein Verständnis für solche Dinge nicht ausreichen, mit nützlichen Tipps aktiv zu arbeiten.