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
|
||||
// ======================================================================
|
||||
|
||||
/** 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