TYPO3-Tipp: Wenn Anführungszeichen vor Zahlen zum Problem werden
Artikel vorlesen lassen
Manchmal sind es die kleinsten Details, die dich zur Verzweiflung bringen: Ein 503-Fehler bei der Bildausgabe - aber nur wenn Anführungszeichen vor einer Zahl stehen. Hier ist die Lösung für diesen fiesen Edge Case, der dich nachts um den Schlaf bringt.
Manchmal sind es die kleinsten Details, die dich zur Verzweiflung bringen. Ein Entwickler aus meiner Community hatte kürzlich ein faszinierendes Problem: Ein 503-Fehler bei der Bildausgabe - aber nur unter ganz speziellen Umständen.
Das mysteriöse Problem
Die Situation: Ein einfaches Inhaltselement "Bilder" mit einem Text im Title-Feld, der Anführungszeichen und eine Jahreszahl enthielt. Soweit, so normal. Doch TYPO3 warf einen strtolower()-Fehler.
Das Verrückte: Der Text funktionierte manchmal, manchmal nicht. Nach einigem Testen stellte sich heraus: Anführungszeichen vor einer Zahl verursachten den Fehler ("2011), während Anführungszeichen nach einer Zahl problemlos funktionieren (2011").
Die Ursache lag im TypoScript
Der Schuldige war diese Zeile für eine Fancybox-Integration:
lib.contentElement.settings.media.popup.linkParams.ATagParams.dataWrap = data-fancybox="fancybox" data-caption="{file:current:title}" Der Fehler strtolower(): Argument #1 ($string) must be of type string, int given zeigt: Irgendwo in der Verarbeitungskette wird ein Integer-Wert an eine Funktion übergeben, die einen String erwartet. Die spezielle Kombination "2011 im Title-Feld löst dieses unerwartete Verhalten aus.
Die saubere Lösung
Die Lösung: Das HTML-Escaping explizit kontrollieren:
lib.contentElement.settings.media.popup.linkParams.ATagParams.dataWrap {
wrap = data-fancybox="fancybox" data-caption="|"
cObject = COA
cObject {
10 = TEXT
10.data = file:current:title
10.htmlSpecialChars = 1
10.if.isTrue.data = file:current:title
}
} Der entscheidende Punkt ist htmlSpecialChars = 1. Das sorgt dafür, dass alle Sonderzeichen korrekt escaped werden, egal ob sie vor Zahlen, Buchstaben oder am Ende stehen.
Was wir daraus lernen können
Das Problem zeigt: Bei dataWrap und ähnlichen TypoScript-Funktionen solltest du HTML-Escaping explizit aktivieren, wenn Nutzereingaben ins Spiel kommen. Die Lösung mit htmlSpecialChars = 1 sorgt für saubere String-Verarbeitung.
Auch wenn 99% der Inhalte problemlos funktionieren - es ist immer dieser eine Edge Case mit speziellen Zeichenkombinationen, der dich nachts um den Schlaf bringt.
Die vollständige Diskussion zu diesem Problem findest du hier im t3forum.
ZurückKommentare unter Artikeln sind deaktiviert. Wenn du eine Frage oder Ergänzung hast, schreib mir bitte eine E-Mail.
Hi, ich bin Wolfgang.
Seit 2006 arbeite ich mit TYPO3. Nicht in der Theorie, sondern in echten Projekten mit echten Deadlines. Die Probleme, die du gerade hast, hatte ich wahrscheinlich schon dreimal.
Irgendwann habe ich angefangen, mein Wissen in Videokurse zu packen. Nicht weil ich gerne vor der Kamera stehe, sondern weil ich dieselben Fragen immer wieder gehört habe. Mittlerweile sind es Hunderte Videos geworden. Jedes Einzelne entstand aus einer konkreten Frage aus einem konkreten Projekt.
Was mich von einem YouTube-Tutorial unterscheidet: Ich kenne nicht nur die Lösung, sondern auch den Kontext. Warum etwas so funktioniert. Wann es nicht funktioniert. Und welche Fehler du dir sparen kannst, weil ich sie schon gemacht habe.
Als Mitglied im TYPO3 Education Committee sorge ich dafür, dass die Zertifizierungsprüfungen auf dem aktuellen Stand bleiben. Was dort geprüft wird, fließt direkt in meine Kurse ein.