diff --git a/compat.php b/compat.php new file mode 100644 index 000000000..57875398b --- /dev/null +++ b/compat.php @@ -0,0 +1,97 @@ + + function mb_strlen($str, $encoding="utf-8") + { + if($encoding != "utf-8") + { return -1; } + + $n=0; + + for($i=0; isset($str{$i}); $i++) + { + $c = ord($str{$i}); + + if (!($c & 0x80)) // single-byte (0xxxxxx) + $n++; + + elseif (($c & 0xC0) == 0xC0) // multi-byte starting byte (11xxxxxx) + $n++; + } + + return $n; + } +} + +if (!function_exists('mb_substr')) +{ + // from Typo3 + // author Martin Kutschker + function mb_substr($str, $start, $len=null, $encoding="utf-8") + { + if($encoding != "utf-8") + { return -1; } + + $byte_start = utf8_char2byte_pos($str,$start); + + if ($byte_start === false) + return false; // $start outside string length + + $str = substr($str,$byte_start); + + if ($len != null) + { + $byte_end = utf8_char2byte_pos($str,$len); + + if ($byte_end === false) // $len outside actual string length + return $str; + else + return substr($str,0,$byte_end); + } + + else return $str; + } + + function utf8_char2byte_pos($str,$pos) + { + $n = 0; // number of characters found + $p = abs($pos); // number of characters wanted + + if ($pos >= 0) + { + $i = 0; + $d = 1; + } else { + $i = strlen($str)-1; + $d = -1; + } + + for( ; isset($str{$i}) && $n<$p; $i+=$d) + { + $c = (int)ord($str{$i}); + + if (!($c & 0x80)) // single-byte (0xxxxxx) + $n++; + elseif (($c & 0xC0) == 0xC0) // multi-byte starting byte (11xxxxxx) + $n++; + } + + if (!isset($str{$i})) + return false; // offset beyond string length + + if ($pos >= 0) + { + // skip trailing multi-byte data bytes + while ((ord($str{$i}) & 0x80) && !(ord($str{$i}) & 0x40)) + { $i++; } + } else { + // correct offset + $i++; + } + + return $i; + } +} diff --git a/functions.php b/functions.php index 7d65c9038..6cc9b2310 100644 --- a/functions.php +++ b/functions.php @@ -8,6 +8,7 @@ require_once 'config.php'; require_once 'db-prefs.php'; + require_once 'compat.php'; require_once 'magpierss/rss_utils.inc';