Franz Holzinger

Verse of the day

Bei Gott ist mein Heil, meine Ehre, der Fels meiner Stärke; meine Zuversicht ist auf Gott.
Psalm 62:7

© Bible Gateway's Verse of the Day


autor  
26-11-14 14:56:57 Variante mit Freitextfeld Zeichenprobleme
Vanessa Meyer
In einem Projekt möchte ich ein Freitextfeld verwenden, ähnlich dem Domain-Feld aus Ihrem Beispiel: http://www.jambage.com/kontakt/forum/shop-system/eingabe-der-daten/list/5398.html?tx_felogin_pi1%5Bforgot%5D=1

Bei der Verarbeitung der eingegeben Userdaten musste ich feststellen, dass bei Verwendung von Zeichen im Textfeld der Programmcode nicht korrekt funktioniert. Problematische Zeichen (mit Komma getrennt): ;,=>,|,. am Ende des Strings.

Nach einer Runde mit dem Debugger habe ich festgestellt, dass die Eingaben im Code in einem String in einer eigenen Notation zusammengefasst werden um später weiterverarbeitet zu werden. Dabei wird der vom User verarbeitete String einfach eingefügt ohne zu escapen. Logisch das beim späteren Parsen einige Zeichen Probleme machen. Gibt es hier nicht die Möglichkeit auf bekannte und stabile Notationen zurückzugreifen, z.B. Json o.ä.?

Desweiteren werden die Usereingaben in der Ausgabe nicht konvertiert, so dass " den Quellcode zerstören, bzw. eingegebene HTML Tags ebenfalls ungefiltert in die Anzeige übergeben werden.
29-11-14 10:31:38 Korrekturen
Franz Holzinger
Es müssen folgende Änderungen in tt_products gemacht werden:

1. lib/class.tx_ttproducts_form_div.php Zeile 289:
$result = '<' . $tag . $attributeTextArray['pre'] . ' name="' . $name . '" value="' . htmlentities($value) . '"' . $attributeTextArray['post'] . ' ' . ($bUseXHTML ? '/' : '') . '>';

2. model/class.tx_ttproducts_edit_variant.php Zeile 110:
$variantArray[] = $field . '=>' . html_entity_decode($value);

3. view/class.tx_ttproducts_edit_variant_view.php Zeile 150:
$html = htmlentities($row[$field]);


Diese Zeichen bzw. Zeichenfolgen sind nicht erlaubt bzw. führen zu Problemen, weil sie intern im Programm Code verwendet werden:
;
=>
|

Um diese Zeichen zu erlauben müsste der interne Programm Ablauf der Verwaltung der Varianten in Arrays geändert werden.
29-11-14 18:04:59 Zeichensatz Problem
Franz Holzinger
Wegen eines Problems mit dem Zeichensatz müssen die htmlentities Aufrufe ein wenig abgeändert werden. Außerdem muss zwischen HTML und XHTML unterschieden werden.

1.:
$flags = ENT_HTML401;
if ($bUseXHTML) {
$flags = ENT_XHTML;
}

$flags |= ENT_QUOTES;

$result = '<' . $tag . $attributeTextArray['pre'] . ' name="' . $name . '" value="' . htmlentities($value, $flags, 'UTF-8') .
-----

3.:
$html = '';
if (isset($row[$field])) {
$bUseXHTML = $GLOBALS['TSFE']->config['config']['xhtmlDoctype'] != '';
$flags = ENT_HTML401;
if ($bUseXHTML) {
$flags = ENT_XHTML;
}
$flags |= ENT_QUOTES;

$html = htmlentities($row[$field], $flags, 'UTF-8');
-----
1-12-14 09:20:17 html_special_chars reicht
Vanessa Meyer
Ich denke html_special_chars sollte an dieser Stelle reichen, ein decodieren der Usereingaben ist nicht so gut, da möglicherweise gewollte Usereingaben ebenfalls decodiert werden.

Folgende Änderungen sollte reichen:

typo3conf\ext\tt_products\view\class.tx_ttproducts_edit_variant_view.php Zeile 150:
$html = htmlspecialchars($row[$field]);

bzw.

typo3conf\ext\tt_products\lib\class.tx_ttproducts_form_div.php Zeile 281:
$result = '<' . $tag . $attributeTextArray['pre'] . ' name="' . $name . '" value="' . htmlspecialchars($value) . '"' . $attributeTextArray['post'] . ' ' . ($bUseXHTML ? '/' : '') . '>';

-----

Das Zeichenproblem mir ; => | habe ich umschifft, indem ich die Werte mit url_endcode codiere und später wieder decodiere, was ich jedoch sehr unschön finde, aber den Aufwand in Grenzen gehalten hat.
1-12-14 13:51:58 htmlspecialchars
Franz Holzinger
Mit dieser Änderung scheint es auch zu klappen:

1.
$result = '<' . $tag . $attributeTextArray['pre'] . ' name="' . $name . '" value="' . htmlspecialchars($value, ENT_QUOTES) . '"' . $attributeTextArray['post'] . ' ' . ($bUseXHTML ? '/' : '') . '>';

2. unverändert zum Original
$variantArray[] = $field . '=>' . $value;

3.
$html = htmlspecialchars($row[$field], ENT_QUOTES);

Die einfachen Hochkommas müssen jedenfalls ersetzt werden, damit das Javascript dann keine Probleme macht.
< Zurück zum Forum