MDL-31101 format_string: Don't mangle < and > in strings like x < 1.
authorTim Hunt <T.J.Hunt@open.ac.uk>
Tue, 10 Jan 2012 14:32:41 +0000 (14:32 +0000)
committerTim Hunt <T.J.Hunt@open.ac.uk>
Tue, 10 Jan 2012 14:52:19 +0000 (14:52 +0000)
lib/simpletest/testweblib.php
lib/weblib.php

index 27359ce..35caaca 100644 (file)
@@ -23,6 +23,8 @@ class web_test extends UnitTestCase {
     }
 
     function test_format_string() {
+        global $CFG;
+
         // Ampersands
         $this->assertEqual(format_string("& &&&&& &&"), "&amp; &amp;&amp;&amp;&amp;&amp; &amp;&amp;");
         $this->assertEqual(format_string("ANother & &&&&& Category"), "ANother &amp; &amp;&amp;&amp;&amp;&amp; Category");
@@ -37,6 +39,21 @@ class web_test extends UnitTestCase {
 
         // Unicode entities
         $this->assertEqual(format_string("&#4475;"), "&#4475;");
+
+        // < and > signs
+        $originalformatstringstriptags = $CFG->formatstringstriptags;
+
+        $CFG->formatstringstriptags = false;
+        $this->assertEqual(format_string('x < 1'), 'x &lt; 1');
+        $this->assertEqual(format_string('x > 1'), 'x &gt; 1');
+        $this->assertEqual(format_string('x < 1 and x > 0'), 'x &lt; 1 and x &gt; 0');
+
+        $CFG->formatstringstriptags = true;
+        $this->assertEqual(format_string('x < 1'), 'x &lt; 1');
+        $this->assertEqual(format_string('x > 1'), 'x &gt; 1');
+        $this->assertEqual(format_string('x < 1 and x > 0'), 'x &lt; 1 and x &gt; 0');
+
+        $CFG->formatstringstriptags = $originalformatstringstriptags;
     }
 
     function test_s() {
index eadfe5d..89bdce5 100644 (file)
@@ -1179,11 +1179,9 @@ function reset_text_filters_cache() {
  * need filter processing e.g. activity titles, post subjects,
  * glossary concepts.
  *
- * @global object
- * @global object
- * @global object
  * @staticvar bool $strcache
- * @param string $string The string to be filtered.
+ * @param string $string The string to be filtered. Should be plain text, expect
+ * possibly for multilang tags.
  * @param boolean $striplinks To strip any link in the result text.
                               Moodle 1.8 default changed from false to true! MDL-8713
  * @param array $options options array/object or courseid
@@ -1241,7 +1239,7 @@ function format_string($string, $striplinks = true, $options = NULL) {
 
     // If the site requires it, strip ALL tags from this string
     if (!empty($CFG->formatstringstriptags)) {
-        $string = strip_tags($string);
+        $string = str_replace(array('<', '>'), array('&lt;', '&gt;'), strip_tags($string));
 
     } else {
         // Otherwise strip just links if that is required (default)