Zitat:
Zitat von mermshaus
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.
|
Dieses Verhalten wäre eine Erklärung, warum Texte mit Umlauten als Ganzes nicht angezeigt wurden.
@Wasser_Wanderer: Füge doch testweise ENT_IGNORE zum htmspecialchars()-Aufruf hinzu, also so:
PHP-Code:
function codiere($s) {
return htmlspecialchars($s, ENT_QUOTES | ENT_IGNORE, 'UTF-8');
}
Falls jetzt nur noch die Umlaute verschwinden oder komisch dargestellt werden, ist deine Variable $spieler nicht in UTF-8 kodiert.
Zitat:
Zitat von Wasser_Wanderer
hier die Fehlermeldungen:
PHP-Code:
Notice: Use of undefined constant ENT_HTML5 - assumed 'ENT_HTML5' in index.php on line 54...
|
Das heißt, deine weiter oben gemachten Angaben zur PHP-Version waren wohl nicht korrekt:
Zitat:
Zitat von Wasser_Wanderer
Auf dem Server läuft:
PHP Version 5.5.9-1ubuntu4.9
|
Das stellt leider auch deine weiteren Angaben infrage:
Zitat:
Zitat von Wasser_Wanderer
1. Das Problem tauchte aufeinmal auf (ca. 1 Monat)
2. Es wurde an den Scripten nichts verändert
|
Ich halte es für sehr unwahrscheinlich, dass dein Hoster vor kurzem auf eine (andere) PHP-5.3-Version geupdated hat.
Zitat:
Zitat von Wasser_Wanderer
PHP-Code:
htmlspecialchars($s, ENT_QUOTES | ENT_HTML5 | ENT_DISALLOWED | ENT_SUBSTITUTE, 'UTF-8');
|
Soweit, so richtig.
Zitat:
Zitat von Wasser_Wanderer
Ich musste ja nur die ENT_HTML5, ENT_DISALLOWED und ENT_SUBSTITUTE in Single-Quotes setzen
|
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.
Das kannst du selbst nachprüfen:
PHP-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);
Letztendlich macht deine Spezialkonstruktion damit nichts anderes als ein einfaches
PHP-Code:
htmlspecialchars($cdata, ENT_QUOTES)
gemacht hätte -- und das in allen PHP-Versionen.
Ich glaube, du sollstest vor weiteren Ratespielchen und Reparaturversuchen erstmal grundhaft feststellen, worauf du aufbaust.
Außerdem für später:
Zitat:
PHP-Code:
<td colspan="3\" bgcolor=\"".$ergtab."\" height=\"25\"><b style=\"color:".$ergtab2."\">".codierung($spieler)."</b></td>
|
Gewöhnliche Zeichenketten solltest du immer in einfache Hochkommas setzen. Dann musst du die doppelten in den HTML-Attributen nicht extra "escapen".
Ein Vorschlag für mehr Übersichtlichkeit:
PHP-Code:
printf(
'<td colspan="3" bgcolor="%s" height="25"><b style="color:%s">%s</b></td>',
codierung($ergtab),
codierung($ergtab2),
codierung($spieler)
);
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.