Bug: „Unescape“ fehlerhaft implementiert (Domino 8.5.2)

Die Javascript-Funktion unescape ist Serverseitig fehlerhaft implementiert. Nach einem Sonderzeichen wird bei der Konvertierung das darauf folgende einfach ignoriert, wie durch folgendes Beispiel nachvollzogen werden kann.

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.beforePageLoad><![CDATA[#{javascript:
print ( unescape("%20ABC%20DEF") );}]]></xp:this.beforePageLoad>
</xp:view> 

[Fett hervorgehoben: der Funktionsaufruf / In Rot: Encodierte Leerzeichen]

Eigentlich müsste beim Aufruf derXPage auf der Serverkonsole der String “ ABC DEF“ ausgegeben werden, doch verschluckt sich die Funktion und schneidet das A als auch das D einfach ab (die Leerzeichen werden allerdings korrekt umgesetzt):

Dies betrifft die Version 8.5.2FP17, unter 8.5.1 tritt der Bug nicht auf. Welche Versionen sonst noch betroffen sind, ist mir nicht bekannt.

Als Workaround kann die Java-Funktion java.net.URLDecoder.decode verwendet werden:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.beforePageLoad><![CDATA[#{javascript:
print ( java.net.URLDecoder.decode ("%20ABC%20DEF", "utf-8") );}]]>
</xp:this.beforePageLoad>
</xp:view>

[Fett hervorgehoben: Aufruf via Java. Wichtig ist die Angabe des Schemas, hier UTF-8 (zweiter Parameter)]

Dieser Beitrag wurde unter Allgemein, ServerSide JavaScript, XPages abgelegt und mit , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert