diff --git a/admin/dbtransfer/lib.php b/admin/dbtransfer/lib.php index 6d1b8199802ec..de868b352e2bb 100644 --- a/admin/dbtransfer/lib.php +++ b/admin/dbtransfer/lib.php @@ -26,7 +26,7 @@ function dbtransfer_export_xml_database($description, $mdb) { session_get_instance()->write_close(); // release session - header('Content-Type: application/xhtml+xml'); + header('Content-Type: application/xhtml+xml; charset=utf-8'); header('Content-Disposition: attachment; filename=database.xml'); header('Expires: 0'); header('Cache-Control: must-revalidate,post-check=0,pre-check=0'); diff --git a/admin/xmldb/index.php b/admin/xmldb/index.php index 4b80b2862b318..70c3f6da30de6 100644 --- a/admin/xmldb/index.php +++ b/admin/xmldb/index.php @@ -103,7 +103,7 @@ echo $OUTPUT->footer(); break; case ACTION_GENERATE_XML: - header('Content-type: application/xhtml+xml'); + header('Content-type: application/xhtml+xml; charset=utf-8'); echo $xmldb_action->getOutput(); break; } diff --git a/calendar/export_execute.php b/calendar/export_execute.php index e4d62bd322990..3fe48f14f44c8 100644 --- a/calendar/export_execute.php +++ b/calendar/export_execute.php @@ -165,6 +165,6 @@ header('Accept-Ranges: none'); // Comment out if PDFs do not work... header('Content-disposition: attachment; filename='.$filename); header('Content-length: '.strlen($serialized)); -header('Content-type: text/calendar'); +header('Content-type: text/calendar; charset=utf-8'); echo $serialized; diff --git a/filter/algebra/algebradebug.php b/filter/algebra/algebradebug.php index 05853b42a13d1..67b715cc9abc0 100644 --- a/filter/algebra/algebradebug.php +++ b/filter/algebra/algebradebug.php @@ -183,7 +183,7 @@ function refineTeX($texexp) { } function outputText($texexp) { - header("Content-type: text/html"); + header("Content-type: text/html; charset=utf-8"); echo "
\n";
   if ($texexp) {
     $texexp = str_replace('<','<',$texexp);
diff --git a/filter/tex/texdebug.php b/filter/tex/texdebug.php
index 48622240ce6f8..a53f2ee8822b3 100644
--- a/filter/tex/texdebug.php
+++ b/filter/tex/texdebug.php
@@ -96,7 +96,7 @@
 
 
     function outputText($texexp) {
-        header("Content-type: text/html");
+        header("Content-type: text/html; charset=utf-8");
         echo "
\n";
         if ($texexp) {
             $texexp = str_replace('<', '<', $texexp);
diff --git a/lib/ajax/getnavbranch.php b/lib/ajax/getnavbranch.php
index 623f790a10d88..d00bef9db8abb 100644
--- a/lib/ajax/getnavbranch.php
+++ b/lib/ajax/getnavbranch.php
@@ -48,7 +48,7 @@
     $navigation = new global_navigation_for_ajax($PAGE, $branchtype, $branchid);
 
     $linkcategories = false;
-    
+
     if ($instanceid!==null) {
         // Get the db record for the block instance
         $blockrecord = $DB->get_record('block_instances', array('id'=>$instanceid,'blockname'=>'navigation'));
@@ -86,17 +86,17 @@
         $block->trim($navigation, $trimmode, $trimlength, ceil($trimlength/2));
     }
     $converter = new navigation_json();
-    
+
     // Find the actuall branch we are looking for
     $branch = $navigation->find($branchid, $branchtype);
-    
+
     // Remove links to categories if required.
     if (!$linkcategories) {
         foreach ($branch->find_all_of_type(navigation_node::TYPE_CATEGORY) as $category) {
             $category->action = null;
         }
     }
-    
+
     // Stop buffering errors at this point
     $html = ob_get_contents();
     ob_end_clean();
@@ -116,6 +116,6 @@
 // Prepare an XML converter for the branch
 $converter->set_expandable($navigation->get_expandable());
 // Set XML headers
-header('Content-type: text/plain');
+header('Content-type: text/plain; charset=utf-8');
 // Convert and output the branch as XML
 echo $converter->convert($branch);
diff --git a/lib/outputrenderers.php b/lib/outputrenderers.php
index 39a0ac56fe212..bbcad53e1dad6 100644
--- a/lib/outputrenderers.php
+++ b/lib/outputrenderers.php
@@ -324,7 +324,7 @@ public function standard_head_html() {
             $output .= html_writer::empty_tag('link', array('rel' => 'alternate',
                     'type' => $type, 'title' => $alt->title, 'href' => $alt->url));
         }
-        
+
         if (!empty($CFG->additionalhtmlhead)) {
             $output .= "\n".$CFG->additionalhtmlhead;
         }
@@ -2719,9 +2719,9 @@ public function redirect_message($encodedurl, $message, $delay, $debugdisablered
     public function header() {
         // unfortunately YUI iframe upload does not support application/json
         if (!empty($_FILES)) {
-            @header('Content-type: text/plain');
+            @header('Content-type: text/plain; charset=utf-8');
         } else {
-            @header('Content-type: application/json');
+            @header('Content-type: application/json; charset=utf-8');
         }
 
         /// Headers to make it not cacheable and json
diff --git a/lib/setup.php b/lib/setup.php
index b1b9fbf3b974d..e677754189500 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -162,7 +162,7 @@
 // Detect CLI maintenance mode - this is useful when you need to mess with database, such as during upgrades
 if (file_exists("$CFG->dataroot/climaintenance.html")) {
     if (!CLI_SCRIPT) {
-        header('Content-type: text/html');
+        header('Content-type: text/html; charset=utf-8');
         /// Headers to make it not cacheable and json
         header('Cache-Control: no-store, no-cache, must-revalidate');
         header('Cache-Control: post-check=0, pre-check=0', false);
diff --git a/lib/setuplib.php b/lib/setuplib.php
index 33ddf81c7f4e5..cbf6ffd54884d 100644
--- a/lib/setuplib.php
+++ b/lib/setuplib.php
@@ -1268,7 +1268,7 @@ public static function early_error($message, $moreinfourl, $link, $backtrace, $d
                     $e->stacktrace = format_backtrace($backtrace, true);
                 }
             }
-            @header('Content-Type: application/json');
+            @header('Content-Type: application/json; charset=utf-8');
             echo json_encode($e);
             return;
         }
diff --git a/mnet/publickey.php b/mnet/publickey.php
index 10ddcbe7bd9f7..ac018aeec9417 100644
--- a/mnet/publickey.php
+++ b/mnet/publickey.php
@@ -15,6 +15,6 @@
     print_error('mnetdisabled', 'mnet');
 }
 
-header("Content-type: text/plain");
+header("Content-type: text/plain; charset=utf-8");
 $keypair = mnet_get_keypair();
 echo $keypair['certificate'];
diff --git a/mod/chat/chatd.php b/mod/chat/chatd.php
index 9220c21edf441..f255c17dfd200 100755
--- a/mod/chat/chatd.php
+++ b/mod/chat/chatd.php
@@ -363,7 +363,7 @@ function dispatch_sidekick($handle, $type, $sessionid, $customdata) {
                 $header .= "Connection: close\n";
                 $header .= "Date: ".date('r')."\n";
                 $header .= "Server: Moodle\n";
-                $header .= "Content-Type: text/html\n";
+                $header .= "Content-Type: text/html; charset=utf-8\n";
                 $header .= "Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT\n";
                 $header .= "Cache-Control: no-cache, must-revalidate\n";
                 $header .= "Expires: Wed, 4 Oct 1978 09:32:45 GMT\n";
@@ -383,7 +383,7 @@ function dispatch_sidekick($handle, $type, $sessionid, $customdata) {
                 $header .= "Connection: close\n";
                 $header .= "Date: ".date('r')."\n";
                 $header .= "Server: Moodle\n";
-                $header .= "Content-Type: text/html\n";
+                $header .= "Content-Type: text/html; charset=utf-8\n";
                 $header .= "Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT\n";
                 $header .= "Cache-Control: no-cache, must-revalidate\n";
                 $header .= "Expires: Wed, 4 Oct 1978 09:32:45 GMT\n";
@@ -461,7 +461,7 @@ function dispatch_sidekick($handle, $type, $sessionid, $customdata) {
                 $header .= "Connection: close\n";
                 $header .= "Date: ".date('r')."\n";
                 $header .= "Server: Moodle\n";
-                $header .= "Content-Type: text/html\n";
+                $header .= "Content-Type: text/html; charset=utf-8\n";
                 $header .= "Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT\n";
                 $header .= "Cache-Control: no-cache, must-revalidate\n";
                 $header .= "Expires: Wed, 4 Oct 1978 09:32:45 GMT\n";
diff --git a/mod/data/css.php b/mod/data/css.php
index 62b7bc5fae8c5..a6f9616d96efb 100755
--- a/mod/data/css.php
+++ b/mod/data/css.php
@@ -37,7 +37,7 @@
     header('Expires: ' . gmdate("D, d M Y H:i:s", time() + $lifetime) . ' GMT');
     header('Cache-control: max_age = '. $lifetime);
     header('Pragma: ');
-    header('Content-type: text/css');  // Correct MIME type
+    header('Content-type: text/css; charset=utf-8');  // Correct MIME type
 
     echo $data->csstemplate;
 }
\ No newline at end of file
diff --git a/mod/data/js.php b/mod/data/js.php
index 455b7d089a47d..38811ea23a9f7 100644
--- a/mod/data/js.php
+++ b/mod/data/js.php
@@ -38,7 +38,7 @@
     header('Expires: ' . gmdate("D, d M Y H:i:s", time() + $lifetime) . ' GMT');
     header('Cache-control: max_age = '. $lifetime);
     header('Pragma: ');
-    header('Content-type: text/css');  // Correct MIME type
+    header('Content-type: text/css; charset=utf-8');  // Correct MIME type
 
     echo $data->jstemplate;
 }
\ No newline at end of file
diff --git a/repository/repository_ajax.php b/repository/repository_ajax.php
index f460f78baf4d3..0da0fc5390f49 100755
--- a/repository/repository_ajax.php
+++ b/repository/repository_ajax.php
@@ -52,7 +52,7 @@
 $search_text   = optional_param('s', '', PARAM_CLEANHTML);
 $linkexternal  = optional_param('linkexternal', '', PARAM_ALPHA);
 
-@header('Content-type: text/plain');
+@header('Content-type: text/plain; charset=utf-8');
 
 // if uploaded file is larger than post_max_size (php.ini) setting, $_POST content will lost
 if (empty($_POST) && !empty($action)) {
diff --git a/theme/javascript.php b/theme/javascript.php
index 6e44df147cf26..983731b30da25 100644
--- a/theme/javascript.php
+++ b/theme/javascript.php
@@ -95,7 +95,7 @@ function send_cached_js($jspath) {
     header('Expires: '. gmdate('D, d M Y H:i:s', time() + $lifetime) .' GMT');
     header('Pragma: ');
     header('Accept-Ranges: none');
-    header('Content-Type: application/javascript');
+    header('Content-Type: application/javascript; charset=utf-8');
     if (!min_enable_zlib_compression()) {
         header('Content-Length: '.filesize($jspath));
     }
@@ -110,7 +110,7 @@ function send_uncached_js($js) {
     header('Expires: '. gmdate('D, d M Y H:i:s', time() + 2) .' GMT');
     header('Pragma: ');
     header('Accept-Ranges: none');
-    header('Content-Type: application/javascript');
+    header('Content-Type: application/javascript; charset=utf-8');
     header('Content-Length: '.strlen($js));
 
     echo $js;
diff --git a/theme/styles.php b/theme/styles.php
index 72694ca0dc623..2e99fe076725b 100644
--- a/theme/styles.php
+++ b/theme/styles.php
@@ -132,7 +132,7 @@ function send_ie_css($themename, $rev) {
     header('Expires: '. gmdate('D, d M Y H:i:s', time() + $lifetime) .' GMT');
     header('Pragma: ');
     header('Accept-Ranges: none');
-    header('Content-Type: text/css');
+    header('Content-Type: text/css; charset=utf-8');
     header('Content-Length: '.strlen($css));
 
     echo $css;
@@ -147,7 +147,7 @@ function send_cached_css($csspath, $rev) {
     header('Expires: '. gmdate('D, d M Y H:i:s', time() + $lifetime) .' GMT');
     header('Pragma: ');
     header('Accept-Ranges: none');
-    header('Content-Type: text/css');
+    header('Content-Type: text/css; charset=utf-8');
     if (!min_enable_zlib_compression()) {
         header('Content-Length: '.filesize($csspath));
     }
diff --git a/theme/styles_debug.php b/theme/styles_debug.php
index 712d1efa6a4e2..25a50e6a9b2a3 100644
--- a/theme/styles_debug.php
+++ b/theme/styles_debug.php
@@ -125,7 +125,7 @@ function send_uncached_css($css) {
     header('Expires: '. gmdate('D, d M Y H:i:s', time() + THEME_DESIGNER_CACHE_LIFETIME) .' GMT');
     header('Pragma: ');
     header('Accept-Ranges: none');
-    header('Content-Type: text/css');
+    header('Content-Type: text/css; charset=utf-8');
     //header('Content-Length: '.strlen($css));
 
     echo($css);
diff --git a/user/selector/search.php b/user/selector/search.php
index 7259956b17dee..fcaf74ec3bbbe 100644
--- a/user/selector/search.php
+++ b/user/selector/search.php
@@ -35,7 +35,7 @@
     header('Content-type: text/plain; charset=UTF-8');
     $debugmode = true;
 } else {
-    header('Content-type: application/json');
+    header('Content-type: application/json; charset=utf-8');
     $debugmode = false;
 }
 
diff --git a/webservice/rest/locallib.php b/webservice/rest/locallib.php
index 9c5d40beddeca..8feba8f233053 100644
--- a/webservice/rest/locallib.php
+++ b/webservice/rest/locallib.php
@@ -66,7 +66,7 @@ protected function parse_request() {
 
             $this->functionname = isset($_REQUEST['wsfunction']) ? $_REQUEST['wsfunction'] : null;
             unset($_REQUEST['wsfunction']);
-           
+
             $this->parameters = $_REQUEST;
         }
     }
@@ -108,7 +108,7 @@ protected function send_error($ex=null) {
      * @return void
      */
     protected function send_headers() {
-        header('Content-Type: application/xml');
+        header('Content-Type: application/xml; charset=utf-8');
         header('Content-Disposition: inline; filename="response.xml"');
         header('Cache-Control: private, must-revalidate, pre-check=0, post-check=0, max-age=0');
         header('Expires: '. gmdate('D, d M Y H:i:s', 0) .' GMT');
@@ -142,7 +142,7 @@ protected static function xmlize_result($returns, $desc) {
             if (!empty($returns)) {
                 foreach ($returns as $val) {
                     $mult .= self::xmlize_result($val, $desc->content);
-                } 
+                }
             }
             $mult .= ''."\n";
             return $mult;
diff --git a/webservice/soap/locallib.php b/webservice/soap/locallib.php
index 3d477ebefb80f..02e262b19ad9c 100644
--- a/webservice/soap/locallib.php
+++ b/webservice/soap/locallib.php
@@ -56,7 +56,7 @@ protected function init_zend_server() {
         global $CFG;
 
         parent::init_zend_server();
-        
+
         if ($this->authmethod == WEBSERVICE_AUTHMETHOD_USERNAME) {
             $username = optional_param('wsusername', '', PARAM_RAW);
             $password = optional_param('wspassword', '', PARAM_RAW);
@@ -129,7 +129,7 @@ protected function send_error($ex=null) {
 ';
 
         $this->send_headers();
-        header('Content-Type: application/xml');
+        header('Content-Type: application/xml; charset=utf-8');
         header('Content-Disposition: inline; filename="response.xml"');
 
         echo $xml;