fix(webui): e() nimmt jeden skalaren Wert entgegen
Die Seite brach beim Aufbau ab und lieferte im Browser "switchMainTab is not defined": das Rendering endete vor dem Script-Block, sodass keine einzige Funktion definiert wurde. Ursache: e() war als ?string deklariert. PHP wandelt numerische Array-Schlüssel automatisch in int um, sodass die Zeitraum-Auswahl im Fehler-Stream mit den Schlüsseln 0/1/24/168/720 einen int übergab. Unter declare(strict_types=1) warf das einen TypeError mitten in der Ausgabe. Die enge Signatur war generell unpassend: mit ATTR_STRINGIFY_FETCHES = false liefert PDO numerische Spalten als int, und genau diese Werte werden über e() ausgegeben. Die Funktion nimmt jetzt jeden skalaren Typ entgegen. Gefunden hat den Fehler die Selbstmeldung: die unbehandelte Exception landete als Item im eigenen Bugtracker, inklusive Datei und Zeilennummer. Die übrigen typisierten Helfer (dc_dt, dc_ago, getMonitorIconUrl, btUrl, errUrl) wurden gegengeprüft; sie erhalten ausschließlich Strings bzw. Arrays. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
60e34b29f6
commit
92bb400f02
+30
-3
@@ -144,10 +144,37 @@ if ($pendingMigrations !== []) {
|
|||||||
// Hilfsfunktionen fuer die Ausgabe
|
// Hilfsfunktionen fuer die Ausgabe
|
||||||
// ======================================================================
|
// ======================================================================
|
||||||
|
|
||||||
/** Kurzform fuer htmlspecialchars mit sicheren Voreinstellungen. */
|
/**
|
||||||
function e(?string $value): string
|
* Kurzform fuer htmlspecialchars mit sicheren Voreinstellungen.
|
||||||
|
*
|
||||||
|
* Nimmt bewusst jeden skalaren Typ entgegen, nicht nur ?string. Zwei Quellen
|
||||||
|
* liefern hier regelmaessig Integer:
|
||||||
|
* - PDO gibt mit ATTR_STRINGIFY_FETCHES = false numerische Spalten als int
|
||||||
|
* zurueck, und genau diese Werte werden ausgegeben.
|
||||||
|
* - PHP wandelt numerische Array-Schluessel automatisch in int um, sodass
|
||||||
|
* foreach ($optionen as $wert => $label) bei Schluesseln wie '24' einen
|
||||||
|
* int liefert.
|
||||||
|
*
|
||||||
|
* Mit declare(strict_types=1) warf eine ?string-Signatur dabei einen
|
||||||
|
* TypeError - und da diese Funktion mitten im Seitenaufbau steht, brach das
|
||||||
|
* Rendering ab, bevor der Script-Block ausgegeben wurde. Im Browser
|
||||||
|
* aeusserte sich das als "switchMainTab is not defined".
|
||||||
|
*
|
||||||
|
* @param mixed $value
|
||||||
|
*/
|
||||||
|
function e($value): string
|
||||||
{
|
{
|
||||||
return htmlspecialchars($value ?? '', ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
|
if ($value === null) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
if (is_bool($value)) {
|
||||||
|
return $value ? '1' : '';
|
||||||
|
}
|
||||||
|
if (is_array($value) || is_object($value)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return htmlspecialchars((string)$value, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user