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)]