diff --git a/.gitignore b/.gitignore
index eb88b9ccfafd3c03fba70797e06eaf47066d1934..4ce455e4e95185668de32892133e7cb6ffeadad5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
*.min.js.map
-.idea/
\ No newline at end of file
+.idea/
+.vscode
\ No newline at end of file
diff --git a/externallib.php b/externallib.php
index dccc9412a240d4299a491c5e78ce8fdf71beb9ca..e6dd8547ff001d3e0eaf38b82a8e03e65cb1b3db 100644
--- a/externallib.php
+++ b/externallib.php
@@ -192,8 +192,9 @@ class qtype_moopt_external extends external_api {
break;
} else if ($child->localName == 'attached-txt-file') {
$pathinfo = pathinfo('/' . $child->nodeValue);
+ $encoding = $child->attributes->getNamedItem('encoding')->nodeValue;
$filecontent = get_text_content_from_file($usercontext, $draftid, $keepfilename,
- $pathinfo['dirname'] . '/', $pathinfo['basename']);
+ $pathinfo['dirname'] . '/', $pathinfo['basename'], true, $encoding);
$defaultfilename = basename($child->nodeValue);
$fileid = $file->attributes->getNamedItem('id')->nodeValue;
$enablefreetext = true;
@@ -259,8 +260,9 @@ class qtype_moopt_external extends external_api {
} else if ($child->localName == 'attached-txt-file') {
$pathinfo = pathinfo('/' . $child->nodeValue);
$filename = basename($child->nodeValue);
+ $encoding = $child->attributes->getNamedItem('encoding')->nodeValue;
$filecontent = get_text_content_from_file($usercontext, $draftid, $keepfilename,
- $pathinfo['dirname'] . '/', $pathinfo['basename']);
+ $pathinfo['dirname'] . '/', $pathinfo['basename'], true, $encoding);
}
if(!empty($filecontent))
diff --git a/locallib.php b/locallib.php
index 05cefaba98f9a2a8b9ef24a1f9fec9de96eeccc5..4a1df0d2cf4cfb395411ca411d39d3406011b749 100644
--- a/locallib.php
+++ b/locallib.php
@@ -282,7 +282,7 @@ function create_domdocument_from_task_xml($usercontext, $draftareaid, $xmlfilena
* @return string
* @throws invalid_parameter_exception
*/
-function get_text_content_from_file($usercontext, $draftareaid, $keepfilename, $filepath, $filename)
+function get_text_content_from_file($usercontext, $draftareaid, $keepfilename, $filepath, $filename, $attached, $encoding)
{
$fs = get_file_storage();
$file = $fs->get_file($usercontext->id, 'user', 'draft', $draftareaid, $filepath, $filename);
@@ -294,7 +294,22 @@ function get_text_content_from_file($usercontext, $draftareaid, $keepfilename, $
// TODO: make sure the mimetype is plain text
// even task.xmls may contain mistakes (eg PDF )
- return $file->get_content();
+ //check if encoding of attached ist utf-8 else convert
+ $content = $file->get_content();
+ if($encoding!==false){
+ $enc=$encoding;
+ } else {
+ $enc = mb_detect_encoding($content, mb_detect_order(), true);
+ if($enc===false){
+ throw new invalid_parameter_exception('Encoding of attached file ' . $filepath . $filename . 'could\'nt be detectet.');
+ }
+ }
+ $content = mb_convert_encoding($content, $enc, 'UTF-8');
+ if($enc!=='UTF-8'){
+ $content = mb_convert_encoding($content, 'UTF-8', $enc);
+ }
+
+ return $content;
}