Originally posted by Wasser_Wanderer
View Post
Worte mit Umlauten werden nicht angezeigt
Collapse
X
-
Nein, das ist Quatsch. ENT_HTML5 gibts zB. erst ab PHP 5.4. Das heißt du verwendest eine veraltete PHP-Version, die nicht mehr offiziell unterstützt wird. Schleunigst updaten oder anderen Hoster suchen. Mit solchen alten und unsicheren Versionen sollte man sich nicht abgeben. Das hat keine Zukunft und ist nur Zeitverschwendung.
-
Die drei anderen Flags machen keine lebenswichtigen Sachen. ENT_HTML5 kodiert das einfache Anführungszeichen als ' statt als numerische Entität (sollte Browsern und so ziemlich egal sein), die beiden anderen Flags bestimmen, was die Funktion macht, wenn die Eingabe falsch kodierte (UTF-8-)Bytes enthält. Das sollte normalerweise natürlich auch nicht auftreten. Es ist aber ab PHP 5.4 denoch ganz praktisch, die Flags zu setzen, weil es das Standardverhalten von htmlspecialchars ist, bei solchen Fehlern ansonsten einen leeren String zu liefern.
Also, bevor du die Flags in Anführungszeichen setzt (was Unsinn ist, auch wenn PHP das mit falscher Interpretation der Sachlage vorschlägt), lass sie einfach weg. ENT_QUOTES aber dennoch setzen.
Ansonsten siehe natürlich hellbringer.
Comment
-
Dieses Verhalten wäre eine Erklärung, warum Texte mit Umlauten als Ganzes nicht angezeigt wurden.Originally posted by mermshaus View Postwas die Funktion macht, wenn die Eingabe falsch kodierte (UTF-8-)Bytes enthält. Das sollte normalerweise natürlich auch nicht auftreten. Es ist aber ab PHP 5.4 denoch ganz praktisch, die Flags zu setzen, weil es das Standardverhalten von htmlspecialchars ist, bei solchen Fehlern ansonsten einen leeren String zu liefern.
@Wasser_Wanderer: Füge doch testweise ENT_IGNORE zum htmspecialchars()-Aufruf hinzu, also so:
Falls jetzt nur noch die Umlaute verschwinden oder komisch dargestellt werden, ist deine Variable $spieler nicht in UTF-8 kodiert.PHP Code:function codiere($s) {
return htmlspecialchars($s, ENT_QUOTES | ENT_IGNORE, 'UTF-8');
}
Das heißt, deine weiter oben gemachten Angaben zur PHP-Version waren wohl nicht korrekt:Originally posted by Wasser_Wanderer View Posthier die Fehlermeldungen:
PHP Code:Notice: Use of undefined constant ENT_HTML5 - assumed 'ENT_HTML5' in \index.php on line 54...
Das stellt leider auch deine weiteren Angaben infrage:Originally posted by Wasser_Wanderer View PostAuf dem Server läuft:
PHP Version 5.5.9-1ubuntu4.9
Ich halte es für sehr unwahrscheinlich, dass dein Hoster vor kurzem auf eine (andere) PHP-5.3-Version geupdated hat.Originally posted by Wasser_Wanderer View Post1. Das Problem tauchte aufeinmal auf (ca. 1 Monat)
2. Es wurde an den Scripten nichts verändert
Soweit, so richtig.Originally posted by Wasser_Wanderer View PostPHP Code:htmlspecialchars($s, ENT_QUOTES | ENT_HTML5 | ENT_DISALLOWED | ENT_SUBSTITUTE, 'UTF-8');
Soweit, so unsinnig. Setzt du die "unbekannten" Konstanten in einfache Hochkommas, werden aus NULLen Zeichenketten. Verknüpft mit dem Ganzzahl-Operator '|' (bitweises ODER), werden sie wieder zu Integers zwangskonvertiert. Da sie keine für PHP gültigen Zahlenwerte enthalten, macht PHP Nullen (integer(0)) daraus. Am Ende bleibt nur der Wert übrige, den die bekannte Konstante ENT_QUOTES hat, die Zahl 3.Originally posted by Wasser_Wanderer View PostIch musste ja nur die ENT_HTML5, ENT_DISALLOWED und ENT_SUBSTITUTE in Single-Quotes setzen
Das kannst du selbst nachprüfen:
Letztendlich macht deine Spezialkonstruktion damit nichts anderes als ein einfachesPHP Code:// int(187) in aktuellen PHP-Versionen
// int(3) in PHP vor 5.4.0 (+ Fehlermeldungen)
var_dump(ENT_QUOTES | ENT_HTML5 | ENT_DISALLOWED | ENT_SUBSTITUTE);
// int(3)
var_dump(ENT_QUOTES | 'ENT_HTML5' | 'ENT_DISALLOWED' | 'ENT_SUBSTITUTE');
// int(3)
var_dump(ENT_QUOTES);
// int(3)
var_dump(3);
gemacht hätte -- und das in allen PHP-Versionen.PHP Code:htmlspecialchars($cdata, ENT_QUOTES)
Ich glaube, du sollstest vor weiteren Ratespielchen und Reparaturversuchen erstmal grundhaft feststellen, worauf du aufbaust.
Außerdem für später:
Gewöhnliche Zeichenketten solltest du immer in einfache Hochkommas setzen. Dann musst du die doppelten in den HTML-Attributen nicht extra "escapen".PHP Code:<td colspan="3\" bgcolor=\"".$ergtab."\" height=\"25\"><b style=\"color:".$ergtab2."\">".codierung($spieler)."</b></td>
Ein Vorschlag für mehr Übersichtlichkeit:
Auch solltest du alles, was in CSS-Klassen ausgedrückt werden kann, wie Abmessungen, Text- und Hintergrundfarbe ins CSS verlagern. Das macht dein HTML übersichtlicher.PHP Code:printf(
'<td colspan="3" bgcolor="%s" height="25"><b style="color:%s">%s</b></td>',
codierung($ergtab),
codierung($ergtab2),
codierung($spieler)
);
Comment
-
@mermshaus:
Die PHP-Version die ich angegeben habe, ist genau die, was in der PHP-Info steht:
PHP Version 5.5.9-1ubuntu4.9
System Linux powerc110.galaxy-gmbh-service.de 3.13.0-042stab108.2 #1 SMP Tue May 12 18:07:50 MSK 2015 x86_64 Build Date Apr 17 2015 11:41:17 ------------------------------------------------------
Und mein beschriebenes Problem ist mir erst vor ca 1 Monat aufgefallen.
Zu dem Zeitpunkt ca 19.06.2015 wurden alle Sonderzeichen/Umlaute absolut korrekt dargestellt.
Welche PHP-Version davor auf dem Server lief, das ist mir nicht bekannt.
Sicher sind da in der Programmierung handwerkliche Fehler drinne. Das ist mir klar.
Dennoch danke für Eure Hilfestellungen.
Gruss WW
Comment
-
Dann würdest du aber wohl nicht die undefined constant-Notices bzgl. dieser Konstanten bekommen … das ist eigentlich unmöglich.Originally posted by Wasser_Wanderer View PostDie PHP-Version die ich angegeben habe, ist genau die, was in der PHP-Info steht:
PHP Version 5.5.9-1ubuntu4.9
Bau mal im selben(!) Script, in dem du auch das htmlspecialchars bzw. deine Funktion codierung aufrust,
ein – was gibt das aus …?PHP Code:var_dump(phpversion());
I don't believe in rebirth. Actually, I never did in my whole lives.
Comment
-
Also stammen die Fehlermeldungen von der (lokalen) 5.3.8-Version, aber die "verschluckten" Textteile gibts nur auf dem Server mit 5.5.9?Originally posted by Wasser_Wanderer View PostAusgabe: string(16) "5.5.9-1ubuntu4.9"
Local auf dem Windows-PC läuft: 5.3.8 Version
Ich tendiere mehr und mehr dazu, dir einfach 'cp1252' als Parameter für die Zeichenkodierung zu empfehlen:Originally posted by Wasser_Wanderer View PostUnd auf dem lokalen Server tritt das Problem nicht auf.
Das ist zwar keine gute Lösung, müsste aber bei deinen beiden PHP-Versionen zum gleichen Ergebnis führen.PHP Code:function codierung($s)
{
return htmlspecialchars($s, ENT_QUOTES | ENT_IGNORE, 'cp1252');
}
Im Client kommt dann zwar vermutlich immer noch UTF-8+Single-Byte-Mischmasch an, aber an so etwas sind Webbrowser ja gewöhnt.
Last edited by fireweasel; 24-07-2015, 17:00.
Comment
-
Genauso ist es.Originally posted by fireweasel View PostAlso stammen die Fehlermeldungen von der (lokalen) 5.3.8-Version, aber die "verschluckten" Textteile gibts nur auf dem Server mit 5.5.9?
Ich/wir haben die Zeichenkodierung auf: ISO-8859-1 gestellt.Originally posted by fireweaselIch tendiere mehr und mehr dazu, dir einfach 'cp1252' als Parameter für die Zeichenkodierung zu empfehlen:
Das ist zwar keine gute Lösung, müsste aber bei deinen beiden PHP-Versionen zum gleichen Ergebnis führen.PHP Code:function codierung($s)
{
return htmlspecialchars($s, ENT_QUOTES | ENT_IGNORE, 'cp1252');
}
Damit werden die Wörter mit Umlauten richtig und vollständig angezeigt.
Bei UTF-8 werden die Umlaute selbst falsch dargestellt.
Gruss WW
Comment

Comment