diff --git a/question/type/multianswer/questiontype.php b/question/type/multianswer/questiontype.php
index 1a565fd8122..bd0baccc5e3 100644
--- a/question/type/multianswer/questiontype.php
+++ b/question/type/multianswer/questiontype.php
@@ -224,7 +224,7 @@ class embedded_cloze_qtype extends default_questiontype {
$inputname = $nameprefix.$positionkey;
if (isset($state->responses[$positionkey])) {
- $response = stripslashes($state->responses[$positionkey]);
+ $response = $state->responses[$positionkey];
} else {
$response = null;
}
@@ -264,7 +264,7 @@ class embedded_cloze_qtype extends default_questiontype {
}
if (!empty($chosenanswer->feedback)) {
- $feedback = str_replace("'", "\\'", $chosenanswer->feedback);
+ $feedback = s(str_replace(array("\\", "'"), array("\\\\", "\\'"), $chosenanswer->feedback));
$popup = " onmouseover=\"return overlib('$feedback', STICKY, MOUSEOFF, CAPTION, '$strfeedback', FGCOLOR, '#FFFFFF');\" ".
" onmouseout=\"return nd();\" ";
}
@@ -294,14 +294,14 @@ class embedded_cloze_qtype extends default_questiontype {
case 'shortanswer':
case 'numerical':
echo " ";
+ type=\"text\" value=\"".s($response, true)."\" size=\"12\" /> ";
break;
case 'multichoice':
$outputoptions = ''; // Default empty option
foreach ($answers as $mcanswer) {
$selected = $response == $mcanswer->id
? ' selected="selected" ' : '';
- $outputoptions .= "";
+ $outputoptions .= '';
}
// In the next line, $readonly is invalid HTML, but it works in
// all browsers. $disabled would be valid, but then the JS for
@@ -329,7 +329,7 @@ class embedded_cloze_qtype extends default_questiontype {
$teststate = clone($state);
$state->raw_grade = 0;
foreach($question->options->questions as $key => $wrapped) {
- $state->responses[$key] = html_entity_decode($state->responses[$key]);
+ $state->responses[$key] = $state->responses[$key];
$teststate->responses = array('' => $state->responses[$key]);
$teststate->raw_grade = 0;
if (false === $QTYPES[$wrapped->qtype]
@@ -635,7 +635,6 @@ define("ANSWER_REGEX_ANSWER_TYPE_SHORTANSWER", 5);
define("ANSWER_REGEX_ALTERNATIVES", 6);
function qtype_multianswer_extract_question($text) {
-
$question = new stdClass;
$question->qtype = 'multianswer';
$question->questiontext = $text;
@@ -686,7 +685,7 @@ function qtype_multianswer_extract_question($text) {
$wrapped->fraction[] = '0';
}
if (isset($altregs[ANSWER_ALTERNATIVE_REGEX_FEEDBACK])) {
- $wrapped->feedback[] = $altregs[ANSWER_ALTERNATIVE_REGEX_FEEDBACK];
+ $wrapped->feedback[] = html_entity_decode($altregs[ANSWER_ALTERNATIVE_REGEX_FEEDBACK], ENT_QUOTES, 'UTF-8');
} else {
$wrapped->feedback[] = '';
}
@@ -700,7 +699,8 @@ function qtype_multianswer_extract_question($text) {
$wrapped->tolerance[] = 0;
}
} else { // Tolerance can stay undefined for non numerical questions
- $wrapped->answer[] = $altregs[ANSWER_ALTERNATIVE_REGEX_ANSWER];
+ // Undo quoting done by the HTML editor.
+ $wrapped->answer[] = html_entity_decode($altregs[ANSWER_ALTERNATIVE_REGEX_ANSWER], ENT_QUOTES, 'UTF-8');
}
$tmp = explode($altregs[0], $remainingalts, 2);
$remainingalts = $tmp[1];
diff --git a/question/type/questiontype.php b/question/type/questiontype.php
index 7d4d61a9f28..e93a502c322 100644
--- a/question/type/questiontype.php
+++ b/question/type/questiontype.php
@@ -386,7 +386,7 @@ class default_questiontype {
if ($question->options->answers) {
foreach ($question->options->answers as $answer) {
if (((int) $answer->fraction) === 1) {
- return array('' => $answer->answer);
+ return array('' => addslashes($answer->answer));
}
}
}