$value) { $str[$key] = mb_convert_encoding($value, $to_encoding, $from_encoding); } return $str; } return jcode_convert_encoding($str, $to_encoding, $from_encoding); } // mb_convert_variables -- 変数の文字コードを変換する function mb_convert_variables($to_encoding, $from_encoding, &$vars) { // 注: 可変長引数ではない。init.phpから呼ばれる1引数のパターンのみをサポート // 正直に実装するなら、可変引数をリファレンスで受ける方法が必要 if (is_array($from_encoding) || $from_encoding == '' || $from_encoding == 'auto') $from_encoding = mb_detect_encoding(join_array(' ', $vars)); if ($from_encoding != 'ASCII' && $from_encoding != SOURCE_ENCODING) $vars = mb_convert_encoding($vars, $to_encoding, $from_encoding); return $from_encoding; } // 補助関数:配列を再帰的にjoinする function join_array($glue, $pieces) { $arr = array(); foreach ($pieces as $piece) { $arr[] = is_array($piece) ? join_array($glue, $piece) : $piece; } return join($glue, $arr); } // mb_detect_encoding -- 文字エンコーディングを検出する function mb_detect_encoding($str, $encoding_list = '') { static $codes = array(0=>'ASCII', 1=>'EUC-JP', 2=>'SJIS', 3=>'JIS', 4=>'UTF-8'); // 注: $encoding_listは使用しない。 $code = AutoDetect($str); if (! isset($codes[$code])) $code = 0; // oh ;( return $codes[$code]; } // mb_detect_order -- 文字エンコーディング検出順序の設定/取得 function mb_detect_order($encoding_list = NULL) { static $list = array(); // 注: 他の関数に影響を及ぼさない。呼んでも無意味。 if ($encoding_list === NULL) return $list; $list = is_array($encoding_list) ? $encoding_list : explode(',', $encoding_list); return TRUE; } // mb_encode_mimeheader -- MIMEヘッダの文字列をエンコードする function mb_encode_mimeheader($str, $charset = 'ISO-2022-JP', $transfer_encoding = 'B', $linefeed = "\r\n") { // 注: $transfer_encodingに関わらずbase64エンコードを返す $str = mb_convert_encoding($str, $charset, 'auto'); return '=?' . $charset . '?B?' . $str; } // mb_http_output -- HTTP出力文字エンコーディングの設定/取得 function mb_http_output($encoding = '') { return SOURCE_ENCODING; // 注: 何もしない } // mb_internal_encoding -- 内部文字エンコーディングの設定/取得 function mb_internal_encoding($encoding = '') { return SOURCE_ENCODING; // 注: 何もしない } // mb_language -- カレントの言語を設定/取得 function mb_language($language = NULL) { static $mb_language = FALSE; if ($language === NULL) return $mb_language; $mb_language = $language; return TRUE; // 注: 常にTRUEを返す } // mb_strimwidth -- 指定した幅で文字列を丸める function mb_strimwidth($str, $start, $width, $trimmarker = '', $encoding = '') { if ($start == 0 && $width <= strlen($str)) return $str; // 注: EUC-JP専用, $encodingを使用しない $chars = unpack('C*', $str); $substr = ''; while (! empty($chars) && $start > 0) { --$start; if (array_shift($chars) >= 0x80) array_shift($chars); } if ($b_trimmarker = (count($chars) > $width)) { $width -= strlen($trimmarker); } while (! empty($chars) && $width-- > 0) { $char = array_shift($chars); if ($char >= 0x80) { if ($width-- == 0) break; $substr .= chr($char); $char = array_shift($chars); } $substr .= chr($char); } if ($b_trimmarker) $substr .= $trimmarker; return $substr; } // mb_strlen -- 文字列の長さを得る function mb_strlen($str, $encoding = '') { // 注: EUC-JP専用, $encodingを使用しない return jstrlen($str); } // mb_substr -- 文字列の一部を得る function mb_substr($str, $start, $length = NULL, $encoding = '') { // 注: EUC-JP専用, $encodingを使用しない return jsubstr($str, $start, ($length === NULL) ? jstrlen($str) : $length); } ?>