コード例 #1
0
ファイル: mb-emulator.php プロジェクト: hatone/Nucleus-v3.64
function mb_convert_case($str, $case, $encoding = '')
{
    global $mbemu_internals;
    switch ($case) {
        case MB_CASE_UPPER:
            return mb_strtoupper($str, $encoding);
        case MB_CASE_LOWER:
            return mb_strtolower($str, $encoding);
        case MB_CASE_TITLE:
            include_once dirname(__FILE__) . '/upper.table';
            include_once dirname(__FILE__) . '/lower.table';
            $encoding = mb_detect_encoding($str, $encoding);
            $str = mb_convert_encoding($str, 'UTF-8', $encoding);
            $max = preg_match_all('/' . $mbemu_internals['regex'][4] . '/', $str, $allchars);
            // make array of chars
            $newst = '';
            $isalpha = FALSE;
            for ($i = 0; $i < $max; ++$i) {
                $val = _utf8ucs2($allchars[0][$i]);
                //get ucs2 value
                if (0x41 <= $val && $val <= 0x5a) {
                    if ($isalpha) {
                        $val += 0x20;
                        // to lower;
                    } else {
                        $isalpha = TRUE;
                    }
                    $newst .= _ucs2utf8($val);
                } elseif (0x61 <= $val && $val <= 0x7a) {
                    if (!$isalpha) {
                        $val -= 0x20;
                        // to upper
                        $isalpha = TRUE;
                    }
                    $newst .= _ucs2utf8($val);
                } elseif ($upper = $mbemu_internals['upperarray'][$val]) {
                    // this char is lower
                    if ($isalpha) {
                        $newst .= _ucs2utf8($val);
                    } else {
                        $isalpha = TRUE;
                        $newst .= _ucs2utf8($upper);
                    }
                } elseif ($lower = $mbemu_internals['lowerarray'][$val]) {
                    // this char is upper
                    if ($isalpha) {
                        $newst .= _ucs2utf8($lower);
                    } else {
                        $isalpha = TRUE;
                        $newst .= _ucs2utf8($val);
                    }
                } else {
                    $isalpha = FALSE;
                    $newst .= $allchars[0][$i];
                }
            }
            return mb_convert_encoding($newst, $encoding, 'UTF-8');
    }
}
コード例 #2
0
ファイル: mb-emulator.php プロジェクト: kaz6120/P_BLOG
function mb_strimwidth($str, $start, $width, $trimmarker, $encoding = '')
{
    global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;
    $encoding = _get_encoding($str, $encoding);
    $str = mb_substr($str, $start, 'notnumber', $encoding);
    if (($len = mb_strwidth($str, $encoding)) <= $width) {
        return $str;
    }
    $trimwidth = mb_strwidth($trimmarker, $encoding);
    $width -= $trimwidth;
    if ($width <= 0) {
        return $trimmarker;
    }
    switch ($_mb_encoding[$encoding]) {
        case 1:
            //euc-jp
            preg_match_all("/{$euc_match}/", $str, $arr);
            $i = 0;
            while (TRUE) {
                if ($arr[1][$i]) {
                    $width -= 2;
                } else {
                    --$width;
                }
                if ($width < 0) {
                    break;
                }
                ++$i;
            }
            $arr[0] = array_slice($arr[0], 0, $i);
            return implode("", $arr[0]) . $trimmarker;
        case 0:
            //ascii
        //ascii
        case 4:
            //utf-8
            preg_match_all("/{$utf8_match}/", $str, $arr);
            $i = 0;
            while (TRUE) {
                $ucs2 = _utf8ucs2($arr[0][$i]);
                if (0x2000 <= $ucs2 && $ucs2 <= 0xff60 || 0xffa0 <= $ucs2) {
                    $width -= 2;
                } else {
                    --$width;
                }
                if ($width < 0) {
                    break;
                }
                ++$i;
            }
            $arr[0] = array_slice($arr[0], 0, $i);
            return implode("", $arr[0]) . $trimmarker;
        case 2:
            //shift-jis
            preg_match_all("/{$sjis_match}/", $str, $arr);
            $i = 0;
            while (TRUE) {
                if ($arr[1][$i]) {
                    $width -= 2;
                } else {
                    --$width;
                }
                if ($width < 0) {
                    break;
                }
                ++$i;
            }
            $arr[0] = array_slice($arr[0], 0, $i);
            return implode("", $arr[0]) . $trimmarker;
        case 3:
            //jis
            $str = mb_convert_encoding($str, 'SJIS', 'JIS');
            $trimmarker = mb_convert_encoding($trimmarker, 'SJIS', 'JIS');
            preg_match_all("/{$sjis_match}/", $str, $arr);
            $i = 0;
            while (TRUE) {
                if ($arr[1][$i]) {
                    $width -= 2;
                } else {
                    --$width;
                }
                if ($width < 0) {
                    break;
                }
                ++$i;
            }
            $arr[0] = array_slice($arr[0], 0, $i);
            return mb_convert_encoding(implode("", $arr[0]) . $trimmarker, 'JIS', 'SJIS');
    }
}