Fix bug #2020 and and PHP5-iconv-support.
authorMartin Kutschker <martin.t.kutschker@blackbox.net>
Mon, 12 Dec 2005 21:47:50 +0000 (21:47 +0000)
committerMartin Kutschker <martin.t.kutschker@blackbox.net>
Mon, 12 Dec 2005 21:47:50 +0000 (21:47 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@905 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
t3lib/class.t3lib_cs.php
t3lib/config_default.php

index 45ee134..44d00db 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+
+2005-12-09  Martin Kutschker  <martin.t.kutschker@blackbox.net>
+
+       * Fixed bug #2020: t3lib_cs->substr in mbstring-mode always used utf-8
+       * Added support for iconv -functions of PHP5 in t3lib_cs
+
 2005-12-12  Michael Stucki  <michael@typo3.org>
 
        * Fixed wrong/missing label tags around radio input elements
index 81e1eda..a1d57ce 100755 (executable)
  *
  * Functions nearly working on UTF-8 strings:
  *
- * - strlen: returns the length in BYTES, if you need the length in CHARACTERS use utf_strlen
- * - trim/ltrim/rtrim: the second parameter 'charlist' won't work for characters not contained 7-bit ASCII
+ * - strlen: returns the length in BYTES, if you need the length in CHARACTERS use utf8_strlen
+ * - trim/ltrim/rtrim: the second parameter 'charlist' won't work for characters not contained in 7-bit ASCII
  * - strpos/strrpos: they return the BYTE position, if you need the CHARACTER position use utf8_strpos/utf8_strrpos
  * - htmlentities: charset support for UTF-8 only since PHP 4.3.0
  *
@@ -1352,13 +1352,28 @@ class t3lib_cs {
                                // cannot omit $len, when specifying charset
                        if ($len==null) {
                                $enc = mb_internal_encoding();  // save internal encoding
-                               mb_internal_encoding('utf-8');
+                               mb_internal_encoding($charset);
                                $str = mb_substr($string,$start);
                                mb_internal_encoding($enc);     // restore internal encoding
 
                                return $str;
                        }
-                       else    return mb_substr($string,$start,$len,'utf-8');
+                       else {
+                               return mb_substr($string,$start,$len,$charset);
+                       }
+               } elseif ($GLOBALS['TYPO3_CONF_VARS']['SYS']['t3lib_cs_utils'] == 'iconv')      {
+                               // cannot omit $len, when specifying charset
+                       if ($len==null) {
+                               $enc = iconv_get_encoding('internal_encoding'); // save internal encoding
+                               iconv_set_encoding('internal_encoding',$charset);
+                               $str = iconv_substr($string,$start);
+                               iconv_set_encoding('internal_encoding',$enc);   // restore internal encoding
+
+                               return $str;
+                       }
+                       else {
+                               return iconv_substr($string,$start,$len,$charset);
+                       }
                } elseif ($charset == 'utf-8')  {
                        return $this->utf8_substr($string,$start,$len);
                } elseif ($this->eucBasedSets[$charset])        {
@@ -1386,6 +1401,8 @@ class t3lib_cs {
        function strlen($charset,$string)       {
                if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['t3lib_cs_utils'] == 'mbstring') {
                        return mb_strlen($string,$charset);
+               } elseif ($GLOBALS['TYPO3_CONF_VARS']['SYS']['t3lib_cs_utils'] == 'iconv')      {
+                       return iconv_strlen($string,$charset);
                } elseif ($charset == 'utf-8')  {
                        return $this->utf8_strlen($string);
                } elseif ($this->eucBasedSets[$charset])        {
@@ -1501,9 +1518,9 @@ class t3lib_cs {
        function conv_case($charset,$string,$case)      {
                if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['t3lib_cs_utils'] == 'mbstring' && (float)phpversion() >= 4.3)   {
                        if ($case == 'toLower') {
-                               return mb_strtolower($string,'utf-8');
+                               return mb_strtolower($string,$charset);
                        } else {
-                               return mb_strtoupper($string,'utf-8');
+                               return mb_strtoupper($string,$charset);
                        }
                } elseif ($charset == 'utf-8')  {
                        return $this->utf8_char_mapping($string,'case',$case);
@@ -1698,6 +1715,8 @@ class t3lib_cs {
        function utf8_strpos($haystack,$needle,$offset=0)       {
                if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['t3lib_cs_utils'] == 'mbstring') {
                        return mb_strpos($haystack,$needle,$offset,'utf-8');
+               } elseif ($GLOBALS['TYPO3_CONF_VARS']['SYS']['t3lib_cs_utils'] == 'iconv')      {
+                       return iconv_strpos($haystack,$needle,$offset,'utf-8');
                }
 
                $byte_offset = $this->utf8_char2byte_pos($haystack,$offset);
@@ -1721,6 +1740,8 @@ class t3lib_cs {
        function utf8_strrpos($haystack,$needle)        {
                if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['t3lib_cs_utils'] == 'mbstring') {
                        return mb_strrpos($haystack,$needle,'utf-8');
+               } elseif ($GLOBALS['TYPO3_CONF_VARS']['SYS']['t3lib_cs_utils'] == 'iconv')      {
+                       return iconv_strrpos($haystack,$needle,$offset,'utf-8');
                }
 
                $byte_pos = strrpos($haystack,$needle);
index 0e5fa5d..5301ca2 100755 (executable)
@@ -70,9 +70,9 @@ $TYPO3_CONF_VARS = Array(
                'textfile_ext' => 'txt,html,htm,css,inc,php,php3,tmpl,js,sql',  // Text file extensions. Those that can be edited. php,php3 cannot be edited in webspace if they are disallowed! Notice:
                'contentTable' => '',                                   // This is the page-content table (Normally 'tt_content')
                'T3instID' => 'N/A',                                    // A unique installation ID - not used yet. The idea is that a TYPO3 installation can identify itself by this ID string to the Extension Repository on TYPO3.org so that we can keep a realistic count of serious TYPO3 installations.
-               'binPath' => '',                                                // String, comma seperated list: list of absolute paths where external programs should be searched for
+               'binPath' => '',                                                // String, comma separated list: list of absolute paths where external programs should be searched for
                't3lib_cs_convMethod' => '',                    // String (values: "iconv", "recode", "mbstring", default is homemade PHP-code). Defines which of these PHP-features to use for various Charset conversing functions in t3lib_cs. Will speed up charset conversion radically.
-               't3lib_cs_utils' => '',                                 // String (values: "iconv", "recode", "mbstring", default is homemade PHP-code). Defines which of these PHP-features to use for various Charset processing functions in t3lib_cs. Will speed up charset functions radically.
+               't3lib_cs_utils' => '',                                 // String (values: "iconv" - PHP 5.0 only!, "mbstring", default is homemade PHP-code). Defines which of these PHP-features to use for various Charset processing functions in t3lib_cs. Will speed up charset functions radically.
                'no_pconnect' => 0,                                             // Boolean: If true, "connect" is used instead of "pconnect" when connecting to the database!
                'multiplyDBfieldSize' => 1,                             // Double: 1-5: Amount used to multiply the DB field size when the install tool is evaluating the database size (eg. "2.5"). This is useful if you want to expand the size of fields for utf-8 etc. For western european sites using utf-8 the need should not be for more than twice the normal single-byte size (2) and for chinese / asian languages 3 should suffice.
                'setMemoryLimit' => 0,                                  // Integer, memory_limit in MB: If more than 16, TYPO3 will try to use ini_set() to set the memory limit of PHP to the value. This works only if the function ini_set() is not disabled by your sysadmin.
@@ -401,4 +401,4 @@ unset($LOCAL_LANG);
        // Setting some global vars:
 $EXEC_TIME = time();                                   // $EXEC_TIME is set so that the rest of the script has a common value for the script execution time
 $SIM_EXEC_TIME = $EXEC_TIME;                   // $SIM_EXEC_TIME is set to $EXEC_TIME but can be altered later in the script if we want to simulate another execution-time when selecting from eg. a database
-?>
\ No newline at end of file
+?>