MDL-41197 ignore all problems when converting texts
authorPetr Škoda <commits@skodak.org>
Fri, 4 Oct 2013 08:59:41 +0000 (10:59 +0200)
committerPetr Škoda <commits@skodak.org>
Fri, 4 Oct 2013 08:59:41 +0000 (10:59 +0200)
lib/classes/text.php
lib/tests/text_test.php

index 9ce3ea4..1f79ae1 100644 (file)
@@ -178,11 +178,16 @@ class core_text {
             return '';
         }
 
-        if ($toCS === 'utf-8' and $fromCS === 'utf-8') {
-            return fix_utf8($text);
+        if ($fromCS === 'utf-8') {
+            $text = fix_utf8($text);
+            if ($toCS === 'utf-8') {
+                return $text;
+            }
         }
 
-        $result = iconv($fromCS, $toCS.'//TRANSLIT', $text);
+        // Prevent any error notices, do not use //IGNORE so that we get
+        // consistent result from Typo3 if iconv fails.
+        $result = @iconv($fromCS, $toCS.'//TRANSLIT', $text);
 
         if ($result === false or $result === '') {
             // note: iconv is prone to return empty string when invalid char encountered, or false if encoding unsupported
index fb33750..1ac11ca 100644 (file)
@@ -88,6 +88,10 @@ class core_text_testcase extends advanced_testcase {
         $this->assertSame($str, core_text::convert($utf8, 'utf-8', 'GB18030'));
         $this->assertSame($utf8, core_text::convert($str, 'GB18030', 'utf-8'));
         $this->assertSame($utf8, core_text::convert($utf8, 'utf-8', 'utf-8'));
+
+        $utf8 = "Žluťoučký koníček";
+        $this->assertSame('Zlutouck\'y kon\'icek', core_text::convert($utf8, 'utf-8', 'ascii'));
+        $this->assertSame($utf8, core_text::convert($utf8.chr(130), 'utf-8', 'utf-8'));
     }
 
     /**