Fixed bug #11808: Increase performance using mbstring in t3lib_cs->crop
authorRupert Germann <rupi@gmx.li>
Sun, 30 Aug 2009 09:53:50 +0000 (09:53 +0000)
committerRupert Germann <rupi@gmx.li>
Sun, 30 Aug 2009 09:53:50 +0000 (09:53 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@5843 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
t3lib/class.t3lib_cs.php

index e059bb7..f666bdb 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2009-08-29  Rupert Germann  <rupi@gmx.li>
+
+       * Fixed bug #11808: Increase performance using mbstring in t3lib_cs->crop (thanks to Timo Schmidt)
+
 2009-08-29  Christian Kuhn  <lolli@schwarzbu.ch>
 
        * Fixed bug #11804: Upgrade wizard does not install opendocs as system extension (thanks to Steffen Gebert)
index 96a52cf..09fdde7 100644 (file)
@@ -1462,6 +1462,30 @@ class t3lib_cs {
                return strlen($string);
        }
 
+       /**
+        * Method to crop strings using the mb_substr function.
+        *
+        * @param  string               The character set
+        * @param  string               String to be cropped
+        * @param  integer              Crop length (in characters)
+        * @param  string               Crop signifier
+        * @return string               The shortened string
+        * @see mb_strlen(), mb_substr()
+        */
+       protected function cropMbstring($charset, $string, $len, $crop = '') {
+               if (intval($len) == 0 || mb_strlen($string) < $len) {
+                       return $string;
+               }
+
+               if ($len > 0) {
+                       $string = mb_substr($string, 0, $len, $charset) . $crop;
+               } else {
+                       $string = $crop . mb_substr($string, $len, mb_strlen($string, $charset), $charset);
+               }
+
+               return $string;
+       }
+
        /**
         * Truncates a string and pre-/appends a string.
         * Unit tested by Kasper
@@ -1475,6 +1499,10 @@ class t3lib_cs {
         * @author      Martin Kutschker <martin.t.kutschker@blackbox.net>
         */
        function crop($charset,$string,$len,$crop='')   {
+               if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['t3lib_cs_utils'] == 'mbstring') {
+                       return $this->cropMbstring($charset, $string, $len, $crop);
+               }
+
                if (intval($len) == 0)  return $string;
 
                if ($charset == 'utf-8')        {