OSDN Git Service

Warning: pack(): Type H: illegal hex digit ...
[pukiwiki/pukiwiki.git] / lib / mbstring.php
1 <?php
2 /////////////////////////////////////////////////
3 // PukiWiki - Yet another WikiWikiWeb clone.
4 //
5 // $Id: mbstring.php,v 1.2 2004/10/13 14:46:59 henoheno Exp $
6 //
7
8 /*
9  * mbstring extension ¤¬¥µ¡¼¥Ð¡¼Â¦¤Ë¸ºß¤·¤Ê¤¤»þ¤ÎÂåÂشؿô
10  *
11  * Ãí°Õ»ö¹à
12  *
13  * 1. ¼ÂºÝ¤Ë´Á»ú¥³¡¼¥ÉÊÑ´¹¤ò¹Ô¤ï¤»¤ë¤¿¤á¤Ë¤Ï¡¢ÊÌÅÓ jcode.php
14  *    (TOMOºî)¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
15  *
16  *   http://www.spencernetwork.org/jcode/ ¤è¤êjcode¤òÆþ¼ê¤·¡¢
17  *   °Ê²¼¤ÎÍͤËŸ³«¤·¤Æ¤¯¤À¤µ¤¤¡£
18  *
19  *   -+--- mbstring.php          -r--
20  *    +-+- jcode_1.34/           dr-x
21  *      +--- readme.txt          -r--
22  *      +--- jcode.phps          -r--
23  *      +--- jcode_wrapper.php   -r--
24  *      +--- code_table.ucs2jis  -r--
25  *      +--- code_table.jis2ucs  -r--
26  *
27  * 2. EUC-JPÀìÍѤǤ¹¡£(½ÐÎϤµ¤ì¤ë¥Ç¡¼¥¿¤¬EUC-JP¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹)
28  *
29  */
30
31 // jcode¤Î½êºß
32 define('JCODE_DIR', './jcode_1.34/');
33 define('JCODE_FILE', JCODE_DIR . 'jcode_wrapper.php');
34
35 if (is_readable(JCODE_FILE)) {
36         require_once(JCODE_FILE);
37 }
38
39 // jcode¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¡¢¥Þ¥ë¥Á¥Ð¥¤¥Èʸ»ú¤ä´Á»ú¥³¡¼¥É¤ò°·¤¨¤Ê¤¤
40 if (! function_exists('jcode_convert_encoding')) {
41
42 //      die_message('Multibyte functions cannot be used. Please read "mbstring.php" for an additional installation procedure of "jcode".');
43
44         function jstrlen($str)
45         {
46                 return strlen($str);
47         }
48
49         function jsubstr($str, $start, $length)
50         {
51                 return substr($str, $start, $length);
52         }
53
54         function AutoDetect($str)
55         {
56                 return 0;
57         }
58
59         function jcode_convert_encoding($str, $to_encoding, $from_encoding)
60         {
61                 return $str;
62         }
63 }
64
65 // mb_convert_encoding -- Ê¸»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤òÊÑ´¹¤¹¤ë
66 function mb_convert_encoding($str, $to_encoding, $from_encoding = '')
67 {
68         // ³ÈÄ¥: ÇÛÎó¤ò¼õ¤±¤é¤ì¤ë¤è¤¦¤Ë
69         // mb_convert_variableÂкö
70         if (is_array($str)) {
71                 foreach ($str as $key=>$value) {
72                         $str[$key] = mb_convert_encoding($value, $to_encoding, $from_encoding);
73                 }
74                 return $str;
75         }
76         return jcode_convert_encoding($str, $to_encoding, $from_encoding);
77 }
78
79 // mb_convert_variables -- ÊÑ¿ô¤Îʸ»ú¥³¡¼¥É¤òÊÑ´¹¤¹¤ë
80 function mb_convert_variables($to_encoding, $from_encoding, &$vars)
81 {
82         // Ãí: ²ÄÊÑĹ°ú¿ô¤Ç¤Ï¤Ê¤¤¡£init.php¤«¤é¸Æ¤Ð¤ì¤ë1°ú¿ô¤Î¥Ñ¥¿¡¼¥ó¤Î¤ß¤ò¥µ¥Ý¡¼¥È
83         // ÀµÄ¾¤Ë¼ÂÁõ¤¹¤ë¤Ê¤é¡¢²ÄÊÑ°ú¿ô¤ò¥ê¥Õ¥¡¥ì¥ó¥¹¤Ç¼õ¤±¤ëÊýË¡¤¬É¬Í×
84         if (is_array($from_encoding) || $from_encoding == '' || $from_encoding == 'auto')
85                 $from_encoding = mb_detect_encoding(join_array(' ', $vars));
86
87         if ($from_encoding != 'ASCII' && $from_encoding != SOURCE_ENCODING)
88                 $vars = mb_convert_encoding($vars, $to_encoding, $from_encoding);
89
90         return $from_encoding;
91 }
92
93 // Êä½õ´Ø¿ô:ÇÛÎó¤òºÆµ¢Åª¤Ëjoin¤¹¤ë
94 function join_array($glue, $pieces)
95 {
96         $arr = array();
97         foreach ($pieces as $piece) {
98                 $arr[] = is_array($piece) ? join_array($glue, $piece) : $piece;
99         }
100         return join($glue, $arr);
101 }
102
103 // mb_detect_encoding -- Ê¸»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò¸¡½Ð¤¹¤ë
104 function mb_detect_encoding($str, $encoding_list = '')
105 {
106         static $codes = array(0=>'ASCII', 1=>'EUC-JP', 2=>'SJIS', 3=>'JIS', 4=>'UTF-8');
107
108         // Ãí: $encoding_list¤Ï»ÈÍѤ·¤Ê¤¤¡£
109         $code = AutoDetect($str);
110         if (! isset($codes[$code])) $code = 0; // oh ;(
111
112         return $codes[$code];
113 }
114
115 // mb_detect_order --  Ê¸»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¸¡½Ð½ç½ø¤ÎÀßÄê/¼èÆÀ
116 function mb_detect_order($encoding_list = NULL)
117 {
118         static $list = array();
119
120         // Ãí: Â¾¤Î´Ø¿ô¤Ë±Æ¶Á¤òµÚ¤Ü¤µ¤Ê¤¤¡£¸Æ¤ó¤Ç¤â̵°ÕÌ£¡£
121         if ($encoding_list === NULL) return $list;
122
123         $list = is_array($encoding_list) ? $encoding_list : explode(',', $encoding_list);
124         return TRUE;
125 }
126
127 // mb_encode_mimeheader -- MIME¥Ø¥Ã¥À¤Îʸ»úÎó¤ò¥¨¥ó¥³¡¼¥É¤¹¤ë
128 function mb_encode_mimeheader($str, $charset = 'ISO-2022-JP', $transfer_encoding = 'B', $linefeed = "\r\n")
129 {
130         // Ãí: $transfer_encoding¤Ë´Ø¤ï¤é¤ºbase64¥¨¥ó¥³¡¼¥É¤òÊÖ¤¹
131         $str = mb_convert_encoding($str, $charset, 'auto');
132         return '=?' . $charset . '?B?' . $str;
133 }
134
135 // mb_http_output -- HTTP½ÐÎÏʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ÎÀßÄê/¼èÆÀ
136 function mb_http_output($encoding = '')
137 {
138         return SOURCE_ENCODING; // Ãí: ²¿¤â¤·¤Ê¤¤
139 }
140
141 // mb_internal_encoding --  ÆâÉôʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ÎÀßÄê/¼èÆÀ
142 function mb_internal_encoding($encoding = '')
143 {
144         return SOURCE_ENCODING; // Ãí: ²¿¤â¤·¤Ê¤¤
145 }
146
147 // mb_language --  ¥«¥ì¥ó¥È¤Î¸À¸ì¤òÀßÄê/¼èÆÀ
148 function mb_language($language = NULL)
149 {
150         static $mb_language = FALSE;
151
152         if ($language === NULL) return $mb_language;
153         $mb_language = $language;
154
155         return TRUE; // Ãí: ¾ï¤ËTRUE¤òÊÖ¤¹
156 }
157
158 // mb_strimwidth -- »ØÄꤷ¤¿Éý¤Çʸ»úÎó¤ò´Ý¤á¤ë
159 function mb_strimwidth($str, $start, $width, $trimmarker = '', $encoding = '')
160 {
161         if ($start == 0 && $width <= strlen($str)) return $str;
162
163         // Ãí: EUC-JPÀìÍÑ, $encoding¤ò»ÈÍѤ·¤Ê¤¤
164         $chars = unpack('C*', $str);
165         $substr = '';
166
167         while (! empty($chars) && $start > 0) {
168                 --$start;
169                 if (array_shift($chars) >= 0x80)
170                         array_shift($chars);
171         }
172         if ($b_trimmarker = (count($chars) > $width)) {
173                 $width -= strlen($trimmarker);
174         }
175         while (! empty($chars) && $width-- > 0) {
176                 $char = array_shift($chars);
177                 if ($char >= 0x80) {
178                         if ($width-- == 0) break;
179                         $substr .= chr($char);
180                         $char = array_shift($chars);
181                 }
182                 $substr .= chr($char);
183         }
184         if ($b_trimmarker) $substr .= $trimmarker;
185
186         return $substr;
187 }
188
189 // mb_strlen -- Ê¸»úÎó¤ÎŤµ¤òÆÀ¤ë
190 function mb_strlen($str, $encoding = '')
191 {
192         // Ãí: EUC-JPÀìÍÑ, $encoding¤ò»ÈÍѤ·¤Ê¤¤
193         return jstrlen($str);
194 }
195
196 // mb_substr -- Ê¸»úÎó¤Î°ìÉô¤òÆÀ¤ë
197 function mb_substr($str, $start, $length = NULL, $encoding = '')
198 {
199         // Ãí: EUC-JPÀìÍÑ, $encoding¤ò»ÈÍѤ·¤Ê¤¤
200         return jsubstr($str, $start, ($length === NULL) ? jstrlen($str) : $length);
201 }
202 ?>