diff --git a/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java index 4945c6351350e71b5df2fe3030a23aa1557763a7..dab8dda47f9df74c821b29c2df4e297ef779adb1 100644 --- a/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java +++ b/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java @@ -37,6 +37,7 @@ import java.util.concurrent.atomic.DoubleAdder; import javax.xml.transform.stream.StreamResult; +import org.apache.commons.lang.StringEscapeUtils; import org.olat.core.gui.render.StringOutput; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; @@ -201,7 +202,7 @@ public class FIBAssessmentItemBuilder extends AssessmentItemBuilder { String marker = "responseIdentifier=\"" + interaction.getResponseIdentifier().toString() + "\""; question = question.replace(marker, marker + " openolatType=\"string\""); if(StringHelper.containsNonWhitespace(textEntry.getSolution())) { - question = question.replace(marker, marker + " data-qti-solution=\"" + StringHelper.escapeHtml(textEntry.getSolution()) + "\""); + question = question.replace(marker, marker + " data-qti-solution=\"" + escapeForDataQtiSolution(textEntry.getSolution()) + "\""); } entry = textEntry; @@ -390,6 +391,14 @@ public class FIBAssessmentItemBuilder extends AssessmentItemBuilder { textEntry.setAlternatives(alternatives); } } + + public String escapeForDataQtiSolution(String solution) { + return StringHelper.escapeHtml(solution).replace("/", "\u2215"); + } + + public String unescapeDataQtiSolution(String solution) { + return StringEscapeUtils.unescapeHtml(solution).replace("\u2215", "/"); + } @Override public QTI21QuestionType getQuestionType() { diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBEditorController.java index bfc79d67e54289f854a8d8117bb15ba39615eb60..6e7eef7aaa1baf5e1f2401fe9501c488c0d29bd6 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBEditorController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBEditorController.java @@ -22,7 +22,6 @@ package org.olat.ims.qti21.ui.editor.interactions; import java.io.ByteArrayInputStream; import java.io.File; -import org.apache.commons.lang.StringEscapeUtils; import org.cyberneko.html.parsers.SAXParser; import org.json.JSONException; import org.json.JSONObject; @@ -341,7 +340,7 @@ public class FIBEditorController extends FormBasicController { if("true".equals(solutionEmpty)) { ((TextEntry)entry).setSolution(""); } else { - solution = StringEscapeUtils.unescapeHtml(solution); + solution = itemBuilder.unescapeDataQtiSolution(solution); ((TextEntry)entry).setSolution(solution); } } else if(entry instanceof NumericalEntry) { @@ -369,7 +368,7 @@ public class FIBEditorController extends FormBasicController { if("data-qti-solution".equals(name)) { solution = attributes.getValue(i); if(solution != null) { - solution = StringEscapeUtils.unescapeHtml(solution); + solution = itemBuilder.unescapeDataQtiSolution(solution); } } else if("data-qti-solution-empty".equals(name)) { solutionEmpty = attributes.getValue(i);