utf8.php (14840B)
1 <?php 2 if (extension_loaded('mbstring')) { 3 mb_internal_encoding('UTF-8'); 4 5 function utf8_strlen($string) { 6 return mb_strlen($string); 7 } 8 9 function utf8_strpos($string, $needle, $offset = 0) { 10 return mb_strpos($string, $needle, $offset); 11 } 12 13 function utf8_strrpos($string, $needle, $offset = 0) { 14 return mb_strrpos($string, $needle, $offset); 15 } 16 17 function utf8_substr($string, $offset, $length = null) { 18 if ($length === null) { 19 return mb_substr($string, $offset, utf8_strlen($string)); 20 } else { 21 return mb_substr($string, $offset, $length); 22 } 23 } 24 25 function utf8_strtoupper($string) { 26 return mb_strtoupper($string); 27 } 28 29 function utf8_strtolower($string) { 30 return mb_strtolower($string); 31 } 32 } elseif (function_exists('iconv')) { 33 function utf8_strlen($string) { 34 return iconv_strlen($string, 'UTF-8'); 35 } 36 37 function utf8_strpos($string, $needle, $offset = 0) { 38 return iconv_strpos($string, $needle, $offset, 'UTF-8'); 39 } 40 41 function utf8_strrpos($string, $needle) { 42 return iconv_strrpos($string, $needle, 'UTF-8'); 43 } 44 45 function utf8_substr($string, $offset, $length = null) { 46 if ($length === null) { 47 return iconv_substr($string, $offset, utf8_strlen($string), 'UTF-8'); 48 } else { 49 return iconv_substr($string, $offset, $length, 'UTF-8'); 50 } 51 } 52 53 function utf8_strtolower($string) { 54 static $upper_to_lower; 55 56 if ($upper_to_lower == null) { 57 $upper_to_lower = array( 58 0x0041 => 0x0061, 59 0x03A6 => 0x03C6, 60 0x0162 => 0x0163, 61 0x00C5 => 0x00E5, 62 0x0042 => 0x0062, 63 0x0139 => 0x013A, 64 0x00C1 => 0x00E1, 65 0x0141 => 0x0142, 66 0x038E => 0x03CD, 67 0x0100 => 0x0101, 68 0x0490 => 0x0491, 69 0x0394 => 0x03B4, 70 0x015A => 0x015B, 71 0x0044 => 0x0064, 72 0x0393 => 0x03B3, 73 0x00D4 => 0x00F4, 74 0x042A => 0x044A, 75 0x0419 => 0x0439, 76 0x0112 => 0x0113, 77 0x041C => 0x043C, 78 0x015E => 0x015F, 79 0x0143 => 0x0144, 80 0x00CE => 0x00EE, 81 0x040E => 0x045E, 82 0x042F => 0x044F, 83 0x039A => 0x03BA, 84 0x0154 => 0x0155, 85 0x0049 => 0x0069, 86 0x0053 => 0x0073, 87 0x1E1E => 0x1E1F, 88 0x0134 => 0x0135, 89 0x0427 => 0x0447, 90 0x03A0 => 0x03C0, 91 0x0418 => 0x0438, 92 0x00D3 => 0x00F3, 93 0x0420 => 0x0440, 94 0x0404 => 0x0454, 95 0x0415 => 0x0435, 96 0x0429 => 0x0449, 97 0x014A => 0x014B, 98 0x0411 => 0x0431, 99 0x0409 => 0x0459, 100 0x1E02 => 0x1E03, 101 0x00D6 => 0x00F6, 102 0x00D9 => 0x00F9, 103 0x004E => 0x006E, 104 0x0401 => 0x0451, 105 0x03A4 => 0x03C4, 106 0x0423 => 0x0443, 107 0x015C => 0x015D, 108 0x0403 => 0x0453, 109 0x03A8 => 0x03C8, 110 0x0158 => 0x0159, 111 0x0047 => 0x0067, 112 0x00C4 => 0x00E4, 113 0x0386 => 0x03AC, 114 0x0389 => 0x03AE, 115 0x0166 => 0x0167, 116 0x039E => 0x03BE, 117 0x0164 => 0x0165, 118 0x0116 => 0x0117, 119 0x0108 => 0x0109, 120 0x0056 => 0x0076, 121 0x00DE => 0x00FE, 122 0x0156 => 0x0157, 123 0x00DA => 0x00FA, 124 0x1E60 => 0x1E61, 125 0x1E82 => 0x1E83, 126 0x00C2 => 0x00E2, 127 0x0118 => 0x0119, 128 0x0145 => 0x0146, 129 0x0050 => 0x0070, 130 0x0150 => 0x0151, 131 0x042E => 0x044E, 132 0x0128 => 0x0129, 133 0x03A7 => 0x03C7, 134 0x013D => 0x013E, 135 0x0422 => 0x0442, 136 0x005A => 0x007A, 137 0x0428 => 0x0448, 138 0x03A1 => 0x03C1, 139 0x1E80 => 0x1E81, 140 0x016C => 0x016D, 141 0x00D5 => 0x00F5, 142 0x0055 => 0x0075, 143 0x0176 => 0x0177, 144 0x00DC => 0x00FC, 145 0x1E56 => 0x1E57, 146 0x03A3 => 0x03C3, 147 0x041A => 0x043A, 148 0x004D => 0x006D, 149 0x016A => 0x016B, 150 0x0170 => 0x0171, 151 0x0424 => 0x0444, 152 0x00CC => 0x00EC, 153 0x0168 => 0x0169, 154 0x039F => 0x03BF, 155 0x004B => 0x006B, 156 0x00D2 => 0x00F2, 157 0x00C0 => 0x00E0, 158 0x0414 => 0x0434, 159 0x03A9 => 0x03C9, 160 0x1E6A => 0x1E6B, 161 0x00C3 => 0x00E3, 162 0x042D => 0x044D, 163 0x0416 => 0x0436, 164 0x01A0 => 0x01A1, 165 0x010C => 0x010D, 166 0x011C => 0x011D, 167 0x00D0 => 0x00F0, 168 0x013B => 0x013C, 169 0x040F => 0x045F, 170 0x040A => 0x045A, 171 0x00C8 => 0x00E8, 172 0x03A5 => 0x03C5, 173 0x0046 => 0x0066, 174 0x00DD => 0x00FD, 175 0x0043 => 0x0063, 176 0x021A => 0x021B, 177 0x00CA => 0x00EA, 178 0x0399 => 0x03B9, 179 0x0179 => 0x017A, 180 0x00CF => 0x00EF, 181 0x01AF => 0x01B0, 182 0x0045 => 0x0065, 183 0x039B => 0x03BB, 184 0x0398 => 0x03B8, 185 0x039C => 0x03BC, 186 0x040C => 0x045C, 187 0x041F => 0x043F, 188 0x042C => 0x044C, 189 0x00DE => 0x00FE, 190 0x00D0 => 0x00F0, 191 0x1EF2 => 0x1EF3, 192 0x0048 => 0x0068, 193 0x00CB => 0x00EB, 194 0x0110 => 0x0111, 195 0x0413 => 0x0433, 196 0x012E => 0x012F, 197 0x00C6 => 0x00E6, 198 0x0058 => 0x0078, 199 0x0160 => 0x0161, 200 0x016E => 0x016F, 201 0x0391 => 0x03B1, 202 0x0407 => 0x0457, 203 0x0172 => 0x0173, 204 0x0178 => 0x00FF, 205 0x004F => 0x006F, 206 0x041B => 0x043B, 207 0x0395 => 0x03B5, 208 0x0425 => 0x0445, 209 0x0120 => 0x0121, 210 0x017D => 0x017E, 211 0x017B => 0x017C, 212 0x0396 => 0x03B6, 213 0x0392 => 0x03B2, 214 0x0388 => 0x03AD, 215 0x1E84 => 0x1E85, 216 0x0174 => 0x0175, 217 0x0051 => 0x0071, 218 0x0417 => 0x0437, 219 0x1E0A => 0x1E0B, 220 0x0147 => 0x0148, 221 0x0104 => 0x0105, 222 0x0408 => 0x0458, 223 0x014C => 0x014D, 224 0x00CD => 0x00ED, 225 0x0059 => 0x0079, 226 0x010A => 0x010B, 227 0x038F => 0x03CE, 228 0x0052 => 0x0072, 229 0x0410 => 0x0430, 230 0x0405 => 0x0455, 231 0x0402 => 0x0452, 232 0x0126 => 0x0127, 233 0x0136 => 0x0137, 234 0x012A => 0x012B, 235 0x038A => 0x03AF, 236 0x042B => 0x044B, 237 0x004C => 0x006C, 238 0x0397 => 0x03B7, 239 0x0124 => 0x0125, 240 0x0218 => 0x0219, 241 0x00DB => 0x00FB, 242 0x011E => 0x011F, 243 0x041E => 0x043E, 244 0x1E40 => 0x1E41, 245 0x039D => 0x03BD, 246 0x0106 => 0x0107, 247 0x03AB => 0x03CB, 248 0x0426 => 0x0446, 249 0x00DE => 0x00FE, 250 0x00C7 => 0x00E7, 251 0x03AA => 0x03CA, 252 0x0421 => 0x0441, 253 0x0412 => 0x0432, 254 0x010E => 0x010F, 255 0x00D8 => 0x00F8, 256 0x0057 => 0x0077, 257 0x011A => 0x011B, 258 0x0054 => 0x0074, 259 0x004A => 0x006A, 260 0x040B => 0x045B, 261 0x0406 => 0x0456, 262 0x0102 => 0x0103, 263 0x039B => 0x03BB, 264 0x00D1 => 0x00F1, 265 0x041D => 0x043D, 266 0x038C => 0x03CC, 267 0x00C9 => 0x00E9, 268 0x00D0 => 0x00F0, 269 0x0407 => 0x0457, 270 0x0122 => 0x0123 271 ); 272 } 273 274 $unicode = utf8_to_unicode($string); 275 276 if (!$unicode) { 277 return false; 278 } 279 280 for ($i = 0; $i < count($unicode); $i++) { 281 if (isset($upper_to_lower[$unicode[$i]])) { 282 $unicode[$i] = $upper_to_lower[$unicode[$i]]; 283 } 284 } 285 286 return unicode_to_utf8($unicode); 287 } 288 289 function utf8_strtoupper($string) { 290 static $lower_to_upper; 291 292 if ($lower_to_upper == null) { 293 $lower_to_upper = array( 294 0x0061 => 0x0041, 295 0x03C6 => 0x03A6, 296 0x0163 => 0x0162, 297 0x00E5 => 0x00C5, 298 0x0062 => 0x0042, 299 0x013A => 0x0139, 300 0x00E1 => 0x00C1, 301 0x0142 => 0x0141, 302 0x03CD => 0x038E, 303 0x0101 => 0x0100, 304 0x0491 => 0x0490, 305 0x03B4 => 0x0394, 306 0x015B => 0x015A, 307 0x0064 => 0x0044, 308 0x03B3 => 0x0393, 309 0x00F4 => 0x00D4, 310 0x044A => 0x042A, 311 0x0439 => 0x0419, 312 0x0113 => 0x0112, 313 0x043C => 0x041C, 314 0x015F => 0x015E, 315 0x0144 => 0x0143, 316 0x00EE => 0x00CE, 317 0x045E => 0x040E, 318 0x044F => 0x042F, 319 0x03BA => 0x039A, 320 0x0155 => 0x0154, 321 0x0069 => 0x0049, 322 0x0073 => 0x0053, 323 0x1E1F => 0x1E1E, 324 0x0135 => 0x0134, 325 0x0447 => 0x0427, 326 0x03C0 => 0x03A0, 327 0x0438 => 0x0418, 328 0x00F3 => 0x00D3, 329 0x0440 => 0x0420, 330 0x0454 => 0x0404, 331 0x0435 => 0x0415, 332 0x0449 => 0x0429, 333 0x014B => 0x014A, 334 0x0431 => 0x0411, 335 0x0459 => 0x0409, 336 0x1E03 => 0x1E02, 337 0x00F6 => 0x00D6, 338 0x00F9 => 0x00D9, 339 0x006E => 0x004E, 340 0x0451 => 0x0401, 341 0x03C4 => 0x03A4, 342 0x0443 => 0x0423, 343 0x015D => 0x015C, 344 0x0453 => 0x0403, 345 0x03C8 => 0x03A8, 346 0x0159 => 0x0158, 347 0x0067 => 0x0047, 348 0x00E4 => 0x00C4, 349 0x03AC => 0x0386, 350 0x03AE => 0x0389, 351 0x0167 => 0x0166, 352 0x03BE => 0x039E, 353 0x0165 => 0x0164, 354 0x0117 => 0x0116, 355 0x0109 => 0x0108, 356 0x0076 => 0x0056, 357 0x00FE => 0x00DE, 358 0x0157 => 0x0156, 359 0x00FA => 0x00DA, 360 0x1E61 => 0x1E60, 361 0x1E83 => 0x1E82, 362 0x00E2 => 0x00C2, 363 0x0119 => 0x0118, 364 0x0146 => 0x0145, 365 0x0070 => 0x0050, 366 0x0151 => 0x0150, 367 0x044E => 0x042E, 368 0x0129 => 0x0128, 369 0x03C7 => 0x03A7, 370 0x013E => 0x013D, 371 0x0442 => 0x0422, 372 0x007A => 0x005A, 373 0x0448 => 0x0428, 374 0x03C1 => 0x03A1, 375 0x1E81 => 0x1E80, 376 0x016D => 0x016C, 377 0x00F5 => 0x00D5, 378 0x0075 => 0x0055, 379 0x0177 => 0x0176, 380 0x00FC => 0x00DC, 381 0x1E57 => 0x1E56, 382 0x03C3 => 0x03A3, 383 0x043A => 0x041A, 384 0x006D => 0x004D, 385 0x016B => 0x016A, 386 0x0171 => 0x0170, 387 0x0444 => 0x0424, 388 0x00EC => 0x00CC, 389 0x0169 => 0x0168, 390 0x03BF => 0x039F, 391 0x006B => 0x004B, 392 0x00F2 => 0x00D2, 393 0x00E0 => 0x00C0, 394 0x0434 => 0x0414, 395 0x03C9 => 0x03A9, 396 0x1E6B => 0x1E6A, 397 0x00E3 => 0x00C3, 398 0x044D => 0x042D, 399 0x0436 => 0x0416, 400 0x01A1 => 0x01A0, 401 0x010D => 0x010C, 402 0x011D => 0x011C, 403 0x00F0 => 0x00D0, 404 0x013C => 0x013B, 405 0x045F => 0x040F, 406 0x045A => 0x040A, 407 0x00E8 => 0x00C8, 408 0x03C5 => 0x03A5, 409 0x0066 => 0x0046, 410 0x00FD => 0x00DD, 411 0x0063 => 0x0043, 412 0x021B => 0x021A, 413 0x00EA => 0x00CA, 414 0x03B9 => 0x0399, 415 0x017A => 0x0179, 416 0x00EF => 0x00CF, 417 0x01B0 => 0x01AF, 418 0x0065 => 0x0045, 419 0x03BB => 0x039B, 420 0x03B8 => 0x0398, 421 0x03BC => 0x039C, 422 0x045C => 0x040C, 423 0x043F => 0x041F, 424 0x044C => 0x042C, 425 0x00FE => 0x00DE, 426 0x00F0 => 0x00D0, 427 0x1EF3 => 0x1EF2, 428 0x0068 => 0x0048, 429 0x00EB => 0x00CB, 430 0x0111 => 0x0110, 431 0x0433 => 0x0413, 432 0x012F => 0x012E, 433 0x00E6 => 0x00C6, 434 0x0078 => 0x0058, 435 0x0161 => 0x0160, 436 0x016F => 0x016E, 437 0x03B1 => 0x0391, 438 0x0457 => 0x0407, 439 0x0173 => 0x0172, 440 0x00FF => 0x0178, 441 0x006F => 0x004F, 442 0x043B => 0x041B, 443 0x03B5 => 0x0395, 444 0x0445 => 0x0425, 445 0x0121 => 0x0120, 446 0x017E => 0x017D, 447 0x017C => 0x017B, 448 0x03B6 => 0x0396, 449 0x03B2 => 0x0392, 450 0x03AD => 0x0388, 451 0x1E85 => 0x1E84, 452 0x0175 => 0x0174, 453 0x0071 => 0x0051, 454 0x0437 => 0x0417, 455 0x1E0B => 0x1E0A, 456 0x0148 => 0x0147, 457 0x0105 => 0x0104, 458 0x0458 => 0x0408, 459 0x014D => 0x014C, 460 0x00ED => 0x00CD, 461 0x0079 => 0x0059, 462 0x010B => 0x010A, 463 0x03CE => 0x038F, 464 0x0072 => 0x0052, 465 0x0430 => 0x0410, 466 0x0455 => 0x0405, 467 0x0452 => 0x0402, 468 0x0127 => 0x0126, 469 0x0137 => 0x0136, 470 0x012B => 0x012A, 471 0x03AF => 0x038A, 472 0x044B => 0x042B, 473 0x006C => 0x004C, 474 0x03B7 => 0x0397, 475 0x0125 => 0x0124, 476 0x0219 => 0x0218, 477 0x00FB => 0x00DB, 478 0x011F => 0x011E, 479 0x043E => 0x041E, 480 0x1E41 => 0x1E40, 481 0x03BD => 0x039D, 482 0x0107 => 0x0106, 483 0x03CB => 0x03AB, 484 0x0446 => 0x0426, 485 0x00FE => 0x00DE, 486 0x00E7 => 0x00C7, 487 0x03CA => 0x03AA, 488 0x0441 => 0x0421, 489 0x0432 => 0x0412, 490 0x010F => 0x010E, 491 0x00F8 => 0x00D8, 492 0x0077 => 0x0057, 493 0x011B => 0x011A, 494 0x0074 => 0x0054, 495 0x006A => 0x004A, 496 0x045B => 0x040B, 497 0x0456 => 0x0406, 498 0x0103 => 0x0102, 499 0x03BB => 0x039B, 500 0x00F1 => 0x00D1, 501 0x043D => 0x041D, 502 0x03CC => 0x038C, 503 0x00E9 => 0x00C9, 504 0x00F0 => 0x00D0, 505 0x0457 => 0x0407, 506 0x0123 => 0x0122 507 ); 508 } 509 510 $unicode = utf8_to_unicode($string); 511 512 if (!$unicode) { 513 return false; 514 } 515 516 for ($i = 0; $i < count($unicode); $i++) { 517 if (isset($lower_to_upper[$unicode[$i]])) { 518 $unicode[$i] = $lower_to_upper[$unicode[$i]]; 519 } 520 } 521 522 return unicode_to_utf8($unicode); 523 } 524 525 function utf8_to_unicode($string) { 526 $unicode = array(); 527 528 for ($i = 0; $i < strlen($string); $i++) { 529 $chr = ord($string[$i]); 530 531 if ($chr >= 0 && $chr <= 127) { 532 $unicode[] = (ord($string[$i]) * pow(64, 0)); 533 } 534 535 if ($chr >= 192 && $chr <= 223) { 536 $unicode[] = ((ord($string[$i]) - 192) * pow(64, 1) + (ord($string[$i + 1]) - 128) * pow(64, 0)); 537 } 538 539 if ($chr >= 224 && $chr <= 239) { 540 $unicode[] = ((ord($string[$i]) - 224) * pow(64, 2) + (ord($string[$i + 1]) - 128) * pow(64, 1) + (ord($string[$i + 2]) - 128) * pow(64, 0)); 541 } 542 543 if ($chr >= 240 && $chr <= 247) { 544 $unicode[] = ((ord($string[$i]) - 240) * pow(64, 3) + (ord($string[$i + 1]) - 128) * pow(64, 2) + (ord($string[$i + 2]) - 128) * pow(64, 1) + (ord($string[$i + 3]) - 128) * pow(64, 0)); 545 } 546 547 if ($chr >= 248 && $chr <= 251) { 548 $unicode[] = ((ord($string[$i]) - 248) * pow(64, 4) + (ord($string[$i + 1]) - 128) * pow(64, 3) + (ord($string[$i + 2]) - 128) * pow(64, 2) + (ord($string[$i + 3]) - 128) * pow(64, 1) + (ord($string[$i + 4]) - 128) * pow(64, 0)); 549 } 550 551 if ($chr == 252 || $chr == 253) { 552 $unicode[] = ((ord($string[$i]) - 252) * pow(64, 5) + (ord($string[$i + 1]) - 128) * pow(64, 4) + (ord($string[$i + 2]) - 128) * pow(64, 3) + (ord($string[$i + 3]) - 128) * pow(64, 2) + (ord($string[$i + 4]) - 128) * pow(64, 1) + (ord($string[$i + 5]) - 128) * pow(64, 0)); 553 } 554 } 555 556 return $unicode; 557 } 558 559 function unicode_to_utf8($unicode) { 560 $string = ''; 561 562 for ($i = 0; $i < count($unicode); $i++) { 563 if ($unicode[$i] < 128) { 564 $string .= chr($unicode[$i]); 565 } 566 567 if ($unicode[$i] >= 128 && $unicode[$i] <= 2047) { 568 $string .= chr(($unicode[$i] / 64) + 192) . chr(($unicode[$i] % 64) + 128); 569 } 570 571 if ($unicode[$i] >= 2048 && $unicode[$i] <= 65535) { 572 $string .= chr(($unicode[$i] / 4096) + 224) . chr(128 + (($unicode[$i] / 64) % 64)) . chr(($unicode[$i] % 64) + 128); 573 } 574 575 if ($unicode[$i] >= 65536 && $unicode[$i] <= 2097151) { 576 $string .= chr(($unicode[$i] / 262144) + 240) . chr((($unicode[$i] / 4096) % 64) + 128) . chr((($unicode[$i] / 64) % 64) + 128) . chr(($unicode[$i] % 64) + 128); 577 } 578 579 if ($unicode[$i] >= 2097152 && $unicode[$i] <= 67108863) { 580 $string .= chr(($unicode[$i] / 16777216) + 248) . chr((($unicode[$i] / 262144) % 64) + 128) . chr((($unicode[$i] / 4096) % 64) + 128) . chr((($unicode[$i] / 64) % 64) + 128) . chr(($unicode[$i] % 64) + 128); 581 } 582 583 if ($unicode[$i] >= 67108864 && $unicode[$i] <= 2147483647) { 584 $string .= chr(($unicode[$i] / 1073741824) + 252) . chr((($unicode[$i] / 16777216) % 64) + 128) . chr((($unicode[$i] / 262144) % 64) + 128) . chr(128 + (($unicode[$i] / 4096) % 64)) . chr((($unicode[$i] / 64) % 64) + 128) . chr(($unicode[$i] % 64) + 128); 585 } 586 } 587 588 return $string; 589 } 590 }