<?php
/**
* UTF-8 friendly replacement functions - v0.2
* Copyright (C) 2004-2005 Niels Leenheer & Andy Matsubara
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* (see nucleus/documentation/index.html#license for more info)
*
* Supported functions:
* - UTF8::convert()
* - UTF8::strtolower()
* - UTF8::strtoupper()
* - UTF8::strlen()
* - UTF8::strwidth()
* - UTF8::substr()
* - UTF8::strimwidth()
* - UTF8::strcut()
* - UTF8::strrpos()
* - UTF8::strpos()
* - UTF8::substr_count()
* - UTF8::encode_mimeheader()
* - UTF8::send_mail()
* - UTF8::encode_javascript()
* - UTF8::encode_numericentity()
*
*/
class UTF8 {
/**
* Convert a foreign charset encoding to UTF-8
*/
function convert($string, $encoding) {
if (function_exists('iconv')) {
return @iconv($encoding, 'UTF-8//IGNORE', $contents);
}
if (function_exists('mb_convert_encoding')) {
@mb_substitute_character('none');
return @mb_convert_encoding($contents, 'UTF-8', $encoding );
}
return $string;
}
/**
* Determine the number of characters of a string
* Compatible with mb_strlen(), an UTF-8 friendly replacement for strlen()
*/
function strlen($str) {
return preg_match_all('/[\x01-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF][\x80-\xBF]/', $str, $arr);
}
/**
* Count the number of substring occurances
* Compatible with mb_substr_count(), an UTF-8 friendly replacement for substr_count()
*/
function substr_count($haystack, $needle) {
return substr_count($haystack, $needle);
}
/**
* Return part of a string, length and offset in characters
* Compatible with mb_substr(), an UTF-8 friendly replacement for substr()
*/
function substr($str, $start , $length = NULL) {
preg_match_all('/[\x01-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF][\x80-\xBF]/', $str, $arr);
if (is_int($length))
return implode('', array_slice($arr[0], $start, $length));
else
return implode('', array_slice($arr[0], $start));
}
/**
* Return part of a string, length and offset in bytes
* Compatible with mb_strcut()
*/
function strcut($str, $start, $length = NULL) {
if ($start < 0) $start += strlen($str);
$original = $start;
while ($start > 0 && intval(ord($str[$start]) & 0xC0) == 0x80)
$start--;
$start = max($start, 0);
$original = max($original, 0);
if ($start < strlen($str))
{
if (is_null($length)) {
return substr($str, $start);
}
elseif ($length > 0) {
$end = $start + $length;
while ($end > 0 && intval(ord($str[$end]) & 0xC0) == 0x80)
$end--;
return substr($str, $start, $end - $start);
}
elseif ($length < 0) {
$end = strlen($str) + $length - ($original - $start);
while ($end > 0 && intval(ord($str[$end]) & 0xC0) == 0x80)
$end--;
if ($end > 0)
return substr($str, $start, $end - $start);
}
}
return '';
}
/**
* Determine the width of a string
* Compatible with mb_strwidth()
*/
function strwidth($str) {
$double = preg_match_all('/[\xE2-\xEF][\x80-\xBF][\x80-\xBF]/', $str, $arr) - // U+2000 - U+FFFF = double width
preg_match_all('/\xEF\xBD[\xA1-\xBF]|\xEF\xBE[\x80-\x9F]/', $str, $arr); // U+FF61 - U+FF9F = single width
$null = preg_match_all('/[\x00-\x19]/', $str, $arr); // U+0000 - U+0019 = no width
return UTF8::strlen($str) - $null + $double;
}
/**
* Get truncated string with specified width
* Compatible with mb_strimwidth()
*/
function strimwidth($str, $start, $width, $trimmarker = '') {
$str = UTF8::substr($str, $start);
$width = $width - UTF8::strwidth($trimmarker);
for ($i = 0; $i < strlen($str); $i++)
{
$b1 = (int)ord($str[$i]);
if ($b1 < 0x80 || $b1 > 0xBF)
{
$c++;
if ($b1 > 0xE2)
{
$b2 = (int)ord($str[$i + 1]);
$b3 = (int)ord($str[$i + 2]);
if (($b2 == 0xBD && $b3 >= 0xA1) || ($b2 == 0xBE && $b3 <= 0x9F))
$count++;
else
$count = $count + 2;
}
else
$count++;
}
if ($count > $width) {
return UTF8::substr($str, 0, $c - 1) . $trimmarker;
}
}
}
/**
* Find position of last occurance of a string in another string
* Compatible with mb_strrpos(), an UTF-8 friendly replacement for strrpos()
*/
function strrpos($haystack, $needle) {
$pos = strrpos($haystack, $needle);
if ($pos === false)
return false;
else
return UTF8::strlen(substr($haystack, 0, $pos));
}
/**
* Find position of first occurance of a string in another string
* Compatible with mb_strpos(), an UTF-8 friendly replacement for strpos()
*/
function strpos($haystack, $needle, $offset = 0) {
$comp = 0;
while (!isset($length) || $length < $offset)
{
$pos = strpos($haystack, $needle, $offset + $comp);
if ($pos === false) return false;
$length = mb_strlen(substr($haystack, 0, $pos));
if ($length < $offset) $comp = $pos - $length;
}
return $length;
}
/**
* Convert a string to lower case
* Compatible with mb_strtolower(), an UTF-8 friendly replacement for strtolower()
*/
function strtolower($str) {
global $UTF8_TABLES;
return strtr($str, $UTF8_TABLES['strtolower']);
}
/**
* Convert a string to upper case
* Compatible with mb_strtoupper(), an UTF-8 friendly replacement for strtoupper()
*/
function strtoupper($str) {
global $UTF8_TABLES;
return strtr($str, $UTF8_TABLES['strtoupper']);
}
/**
* Encode a string for use in a MIME header
* Simplied replacement for mb_encode_mimeheader()
*/
function encode_mimeheader($str) {
$length = 45; $pos = 0; $max = strlen($str);
while ($pos < $max)
{
if ($pos + $length < $max)
{
$adjust = 0;
while (intval(ord($str[$pos + $length + $adjust]) & 0xC0) == 0x80)
$adjust--;
$buffer .= ($buffer == '' ? '' : "?=\r\n =?UTF-8?B?") . base64_encode(substr($str, $pos, $length + $adjust));
$pos = $pos + $length + $adjust;
}
else
{
$buffer .= ($buffer == '' ? '' : "?=\r\n =?UTF-8?B?") . base64_encode(substr($str, $pos));
$pos = $max;
}
}
return '=?UTF-8?B?' . $buffer . '?=';
}
/**
* Send mail
* Replacement for mb_send_mail(), an UTF-8 friendly replacement for mail()
*/
function send_mail($to, $subject, $message , $additional_headers = '', $additional_parameter = '') {
$subject = UTF8::encode_mimeheader($subject);
$message = chunk_split(base64_encode($message));
$additional_headers = trim($additional_headers);
if ($additional_headers != '')
$additional_headers .= "\r\n";
$additional_headers .=
"Mime-Version: 1.0\r\n" .
"Content-Type: text/plain; charset=UTF-8\r\n" .
"Content-Transfer-Encoding: base64";
@mail($to, $subject, $message, $additional_headers, $additional_parameter);
}
/**
* Prepare an UTF-8 string for use in JavaScript
*/
function encode_javascript($string)
{
$string = str_replace ('\\', '\\\\', $string);
$string = str_replace ('"', '\\"', $string);
$string = str_replace ("'", "\\'", $string);
$string = str_replace ("\n", "\\n", $string);
$string = str_replace ("\r", "\\r", $string);
$string = str_replace ("\t", "\\t", $string);
$len = strlen ($string);
$pos = 0;
$out = '';
while ($pos < $len)
{
$ascii = ord (substr ($string, $pos, 1));
if ($ascii >= 0xF0)
{
$byte[1] = ord(substr ($string, $pos, 1)) - 0xF0;
$byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
$byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
$byte[4] = ord(substr ($string, $pos + 3, 1)) - 0x80;
$char_code = ($byte[1] << 18) + ($byte[2] << 12) + ($byte[3] << 6) + $byte[4];
$pos += 4;
}
elseif (($ascii >= 0xE0) && ($ascii < 0xF0))
{
$byte[1] = ord(substr ($string, $pos, 1)) - 0xE0;
$byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
$byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
$char_code = ($byte[1] << 12) + ($byte[2] << 6) + $byte[3];
$pos += 3;
}
elseif (($ascii >= 0xC0) && ($ascii < 0xE0))
{
$byte[1] = ord(substr ($string, $pos, 1)) - 0xC0;
$byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
$char_code = ($byte[1] << 6) + $byte[2];
$pos += 2;
}
else
{
$char_code = ord(substr ($string, $pos, 1));
$pos += 1;
}
if ($char_code < 0x80)
$out .= chr($char_code);
else
$out .= '\\u'. str_pad(dechex($char_code), 4, '0', STR_PAD_LEFT);
}
return $out;
}
/**
* Encode an UTF-8 string with numeric entities
* Simplied replacement for mb_encode_numericentity()
*/
function encode_numericentity($string)
{
$len = strlen ($string);
$pos = 0;
$out = '';
while ($pos < $len)
{
$ascii = ord (substr ($string, $pos, 1));
if ($ascii >= 0xF0)
{
$byte[1] = ord(substr ($string, $pos, 1)) - 0xF0;
$byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
$byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
$byte[4] = ord(substr ($string, $pos + 3, 1)) - 0x80;
$char_code = ($byte[1] << 18) + ($byte[2] << 12) + ($byte[3] << 6) + $byte[4];
$pos += 4;
}
elseif (($ascii >= 0xE0) && ($ascii < 0xF0))
{
$byte[1] = ord(substr ($string, $pos, 1)) - 0xE0;
$byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
$byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
$char_code = ($byte[1] << 12) + ($byte[2] << 6) + $byte[3];
$pos += 3;
}
elseif (($ascii >= 0xC0) && ($ascii < 0xE0))
{
$byte[1] = ord(substr ($string, $pos, 1)) - 0xC0;
$byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
$char_code = ($byte[1] << 6) + $byte[2];
$pos += 2;
}
else
{
$char_code = ord(substr ($string, $pos, 1));
$pos += 1;
}
if ($char_code < 0x80)
$out .= chr($char_code);
else
$out .= '&#'. str_pad($char_code, 5, '0', STR_PAD_LEFT) . ';';
}
return $out;
}
}
/*******************************************************************************************************/
$UTF8_TABLES['strtolower'] = array(
"Z" => "ï½", "ï¼¹" => "ï½", "X" => "ï½",
"ï¼·" => "ï½", "ï¼¶" => "ï½", "ï¼µ" => "ï½",
"ï¼´" => "ï½", "ï¼³" => "ï½", "ï¼²" => "ï½",
"ï¼±" => "ï½", "ï¼°" => "ï½", "O" => "ï½",
"ï¼®" => "ï½", "ï¼" => "ï½", "L" => "ï½",
"K" => "ï½", "J" => "ï½", "I" => "ï½",
"H" => "ï½", "ï¼§" => "ï½", "F" => "ï½",
"ï¼¥" => "ï½
", "D" => "ï½", "ï¼£" => "ï½",
"ï¼¢" => "ï½", "A" => "ï½", "â«" => "Ã¥",
"âª" => "k", "â¦" => "Ï", "á¿»" => "á½½",
"Ὼ" => "ὼ", "Ό" => "ό", "Ὸ" => "ὸ",
"Ῥ" => "ῥ", "Ύ" => "ύ", "Ὺ" => "ὺ",
"á¿©" => "á¿¡", "Ῠ" => "?? ", "á¿" => "á½·",
"á¿" => "á½¶", "á¿" => "á¿", "á¿" => "á¿",
"á¿" => "á½µ", "á¿" => "á½´", "á¿" => "á½³",
"á¿" => "á½²", "á¾»" => "á½±", "Ὰ" => "á½°",
"Ᾱ" => "ᾱ", "Ᾰ" => "ᾰ", "Ὧ" => "ὧ",
"á½®" => "ὦ", "á½" => "á½¥", "Ὤ" => "ὤ",
"Ὣ" => "ὣ", "Ὢ" => "ὢ", "Ὡ" => "ὡ",
"Ὠ" => "?? ", "á½" => "á½", "á½" => "á½",
"á½" => "á½", "á½" => "á½", "á½" => "á½
",
"á½" => "á½", "á½" => "á½", "á½" => "á½",
"á½" => "á½", "á½" => "á½", "Ἷ" => "á¼·",
"á¼¾" => "á¼¶", "á¼½" => "á¼µ", "á¼¼" => "á¼´",
"Ἳ" => "ἳ", "Ἲ" => "ἲ", "Ἱ" => "ἱ",
"Ἰ" => "ἰ", "Ἧ" => "ἧ", "Ἦ" => "ἦ",
"á¼" => "á¼¥", "Ἤ" => "ἤ", "Ἣ" => "á¼£",
"Ἢ" => "ἢ", "Ἡ" => "ἡ", "Ἠ" => "?? ",
"á¼" => "á¼", "á¼" => "á¼", "á¼" => "á¼",
"á¼" => "á¼", "á¼" => "á¼", "á¼" => "á¼",
"á¼" => "á¼", "á¼" => "á¼", "á¼" => "á¼
",
"á¼" => "á¼", "á¼" => "á¼", "á¼" => "á¼",
"á¼" => "á¼", "á¼" => "á¼", "Ỹ" => "ỹ",
"Ỷ" => "ỷ", "Ỵ" => "ỵ", "Ỳ" => "ỳ",
"á»°" => "á»±", "á»®" => "ữ", "Ử" => "á»",
"Ừ" => "ừ", "Ứ" => "ứ", "Ủ" => "ủ",
"Ụ" => "ụ", "Ợ" => "ợ", "?? " => "ỡ",
"á»" => "á»", "á»" => "á»", "á»" => "á»",
"á»" => "á»", "á»" => "á»", "á»" => "á»",
"á»" => "á»", "á»" => "á»", "á»" => "á»",
"á»" => "á»", "á»" => "á»", "á»" => "á»",
"á»" => "á»", "á»" => "á»
", "á»" => "á»",
"á»" => "á»", "Ế" => "ế", "Ẽ" => "ẽ",
"Ẻ" => "ẻ", "Ẹ" => "ẹ", "Ặ" => "ặ",
"Ẵ" => "ẵ", "Ẳ" => "ẳ", "Ằ" => "ằ",
"Ắ" => "ắ", "Ậ" => "áº", "Ẫ" => "ẫ",
"Ẩ" => "ẩ", "Ầ" => "ầ", "Ấ" => "ấ",
"Ả" => "ả", "?? " => "ạ", "áº" => "áº",
"áº" => "áº", "áº" => "áº", "áº" => "áº",
"áº" => "áº", "áº" => "áº", "áº" => "áº",
"áº" => "áº", "áº" => "áº
", "áº" => "áº",
"áº" => "áº", "á¹¾" => "ṿ", "á¹¼" => "á¹½",
"Ṻ" => "ṻ", "Ṹ" => "ṹ", "Ṷ" => "ṷ",
"á¹´" => "á¹µ", "á¹²" => "á¹³", "á¹°" => "á¹±",
"á¹®" => "ṯ", "Ṭ" => "á¹", "Ṫ" => "ṫ",
"Ṩ" => "ṩ", "Ṧ" => "ṧ", "Ṥ" => "ṥ",
"á¹¢" => "á¹£", "?? " => "ṡ", "á¹" => "á¹",
"á¹" => "á¹", "á¹" => "á¹", "á¹" => "á¹",
"á¹" => "á¹", "á¹" => "á¹", "á¹" => "á¹",
"á¹" => "á¹", "á¹" => "á¹", "á¹" => "á¹",
"á¹" => "á¹", "á¹" => "á¹", "á¹" => "á¹",
"á¹" => "á¹
", "á¹" => "á¹", "á¹" => "á¹",
"Ḿ" => "ḿ", "Ḽ" => "ḽ", "Ḻ" => "ḻ",
"Ḹ" => "ḹ", "Ḷ" => "ḷ", "Ḵ" => "ḵ",
"Ḳ" => "ḳ", "Ḱ" => "ḱ", "Ḯ" => "ḯ",
"Ḭ" => "á¸", "Ḫ" => "ḫ", "Ḩ" => "ḩ",
"Ḧ" => "ḧ", "Ḥ" => "ḥ", "Ḣ" => "ḣ",
"?? " => "ḡ", "á¸" => "á¸", "á¸" => "á¸",
"á¸" => "á¸", "á¸" => "á¸", "á¸" => "á¸",
"á¸" => "á¸", "á¸" => "á¸", "á¸" => "á¸",
"á¸" => "á¸", "á¸" => "á¸", "á¸" => "á¸",
"á¸" => "á¸", "á¸" => "á¸", "á¸" => "á¸
",
"á¸" => "á¸", "á¸" => "á¸", "Õ" => "Ö",
"Õ" => "Ö
", "Õ" => "Ö", "Õ" => "Ö",
"Õ" => "Ö", "Õ" => "Ö", "Õ" => "Ö",
"Õ" => "Õ¿", "Õ" => "Õ¾", "Õ" => "Õ½",
"Õ" => "Õ¼", "Õ" => "Õ»", "Õ" => "Õº",
"Õ" => "Õ¹", "Õ" => "Õ¸", "Õ" => "Õ·",
"Õ" => "Õ¶", "Õ
" => "Õµ", "Õ" => "Õ´",
"Õ" => "Õ³", "Õ" => "Õ²", "Õ" => "Õ±",
"Õ" => "Õ°", "Ô¿" => "Õ¯", "Ô¾" => "Õ®",
"Ô½" => "Õ", "Ô¼" => "Õ¬", "Ô»" => "Õ«",
"Ôº" => "Õª", "Ô¹" => "Õ©", "Ô¸" => "Õ¨",
"Ô·" => "Õ§", "Ô¶" => "Õ¦", "Ôµ" => "Õ¥",
"Ô´" => "Õ¤", "Ô³" => "Õ£", "Ô²" => "Õ¢",
"Ô±" => "Õ¡", "Ô" => "Ô", "Ô" => "Ô",
"Ô" => "Ô", "Ô" => "Ô", "Ô" => "Ô",
"Ô" => "Ô
", "Ô" => "Ô", "Ô" => "Ô",
"Ó¸" => "Ó¹", "Ó´" => "Óµ", "Ó²" => "Ó³",
"Ó°" => "Ó±", "Ó®" => "Ó¯", "Ó¬" => "Ó",
"Óª" => "Ó«", "Ó¨" => "Ó©", "Ó¦" => "Ó§",
"Ó¤" => "Ó¥", "Ó¢" => "Ó£", "? " => "Ó¡",
"Ó" => "Ó", "Ó" => "Ó", "Ó" => "Ó",
"Ó" => "Ó", "Ó" => "Ó", "Ó" => "Ó",
"Ó" => "Ó", "Ó" => "Ó", "Ó" => "Ó",
"Ó" => "Ó", "Ó" => "Ó", "Ó" => "Ó",
"Ó
" => "Ó", "Ó" => "Ó", "Ó" => "Ó",
"Ò¾" => "Ò¿", "Ò¼" => "Ò½", "Òº" => "Ò»",
"Ò¸" => "Ò¹", "Ò¶" => "Ò·", "Ò´" => "Òµ",
"Ò²" => "Ò³", "Ò°" => "Ò±", "Ò®" => "Ò¯",
"Ò¬" => "Ò", "Òª" => "Ò«", "Ò¨" => "Ò©",
"Ò¦" => "Ò§", "Ò¤" => "Ò¥", "Ò¢" => "Ò£",
"? " => "Ò¡", "Ò" => "Ò", "Ò" => "Ò",
"Ò" => "Ò", "Ò" => "Ò", "Ò" => "Ò",
"Ò" => "Ò", "Ò" => "Ò", "Ò" => "Ò",
"Ò" => "Ò", "Ò" => "Ò", "Ò" => "Ò",
"Ò" => "Ò", "Ѿ" => "Ñ¿", "Ѽ" => "ѽ",
"Ѻ" => "ѻ", "Ѹ" => "ѹ", "Ѷ" => "ѷ",
"Ѵ" => "ѵ", "Ѳ" => "ѳ", "Ѱ" => "ѱ",
"Ñ®" => "ѯ", "Ѭ" => "Ñ", "Ѫ" => "Ñ«",
"Ѩ" => "ѩ", "Ѧ" => "ѧ", "Ѥ" => "ѥ",
"Ñ¢" => "Ñ£", "? " => "Ñ¡", "Я" => "Ñ",
"Ю" => "Ñ", "Ð" => "Ñ", "Ь" => "Ñ",
"Ы" => "Ñ", "Ъ" => "Ñ", "Щ" => "Ñ",
"Ш" => "Ñ", "Ч" => "Ñ", "Ц" => "Ñ",
"Ð¥" => "Ñ
", "Ф" => "Ñ", "У" => "Ñ",
"Т" => "Ñ", "С" => "Ñ", "? " => "Ñ",
"Ð" => "п", "Ð" => "о", "Ð" => "н",
"Ð" => "м", "Ð" => "л", "Ð" => "к",
"Ð" => "й", "Ð" => "и", "Ð" => "з",
"Ð" => "ж", "Ð" => "е", "Ð" => "д",
"Ð" => "г", "Ð" => "в", "Ð" => "б",
"Ð" => "а", "Ð" => "Ñ", "Ð" => "Ñ",
"Ð" => "Ñ", "Ð" => "Ñ", "Ð" => "Ñ",
"Ð" => "Ñ", "Ð" => "Ñ", "Ð" => "Ñ",
"Ð" => "Ñ", "Ð" => "Ñ", "Ð
" => "Ñ",
"Ð" => "Ñ", "Ð" => "Ñ", "Ð" => "Ñ",
"Ð" => "Ñ", "Ð" => "Ñ", "Ï´" => "θ",
"Ï®" => "ϯ", "Ϭ" => "Ï", "Ϫ" => "Ï«",
"Ϩ" => "ϩ", "Ϧ" => "ϧ", "Ϥ" => "ϥ",
"Ï¢" => "Ï£", "? " => "Ï¡", "Ï" => "Ï",
"Ï" => "Ï", "Ï" => "Ï", "Ï" => "Ï",
"Ϋ" => "Ï", "Ϊ" => "Ï", "Ω" => "Ï",
"Ψ" => "Ï", "Χ" => "Ï", "Φ" => "Ï",
"Î¥" => "Ï
", "Τ" => "Ï", "Σ" => "Ï",
"Ρ" => "Ï", "? " => "Ï", "Î" => "ο",
"Î" => "ξ", "Î" => "ν", "Î" => "μ",
"Î" => "λ", "Î" => "κ", "Î" => "ι",
"Î" => "θ", "Î" => "η", "Î" => "ζ",
"Î" => "ε", "Î" => "δ", "Î" => "γ",
"Î" => "β", "Î" => "α", "Î" => "Ï",
"Î" => "Ï", "Î" => "Ï", "Î" => "ί",
"Î" => "ή", "Î" => "Î", "Î" => "ά",
"Ȳ" => "ȳ", "Ȱ" => "ȱ", "Ȯ" => "ȯ",
"Ȭ" => "È", "Ȫ" => "È«", "Ȩ" => "È©",
"Ȧ" => "ȧ", "Ȥ" => "ȥ", "Ȣ" => "ȣ",
"? " => "Æ", "È" => "È", "È" => "È",
"È" => "È", "È" => "È", "È" => "È",
"È" => "È", "È" => "È", "È" => "È",
"È" => "È", "È" => "È", "È" => "È",
"È" => "È", "È" => "È", "È" => "È
",
"È" => "È", "È" => "È", "Ǿ" => "Ç¿",
"Ǽ" => "ǽ", "Ǻ" => "ǻ", "Ǹ" => "ǹ",
"Ç·" => "Æ¿", "Ƕ" => "Æ", "Ç´" => "ǵ",
"DZ" => "dz", "Ç®" => "ǯ", "Ǭ" => "Ç",
"Ǫ" => "ǫ", "Ǩ" => "ǩ", "Ǧ" => "ǧ",
"Ǥ" => "ǥ", "Ǣ" => "ǣ", "? " => "ǡ",
"Ç" => "Ç", "Ç" => "Ç", "Ç" => "Ç",
"Ç" => "Ç", "Ç" => "Ç", "Ç" => "Ç",
"Ç" => "Ç", "Ç" => "Ç", "Ç" => "Ç",
"Ç" => "Ç", "Ç" => "Ç", "Ç" => "Ç",
"Ƽ" => "ƽ", "Ƹ" => "ƹ", "Æ·" => "Ê",
"Ƶ" => "ƶ", "Ƴ" => "Æ´", "Ʋ" => "Ê",
"Ʊ" => "Ê", "Ư" => "ư", "Æ®" => "Ê",
"Ƭ" => "Æ", "Æ©" => "Ê", "Ƨ" => "ƨ",
"Ʀ" => "Ê", "Ƥ" => "Æ¥", "Æ¢" => "Æ£",
"? " => "Æ¡", "Æ" => "ɵ", "Æ" => "ɲ",
"Æ" => "ɯ", "Æ" => "Æ", "Æ" => "ɨ",
"Æ" => "É©", "Æ" => "É£", "Æ" => "? ",
"Æ" => "Æ", "Æ" => "É", "Æ" => "É",
"Æ" => "Ç", "Æ" => "Æ", "Æ" => "É",
"Æ" => "É", "Æ" => "Æ", "Æ" => "É",
"Æ" => "Æ
", "Æ" => "Æ", "Æ" => "É",
"Ž" => "ž", "Ż" => "ż", "Ź" => "ź",
"Ÿ" => "ÿ", "Ŷ" => "ŷ", "Ŵ" => "ŵ",
"Ų" => "ų", "Ű" => "ű", "Ů" => "ů",
"Ŭ" => "Å", "Ū" => "Å«", "Ũ" => "Å©",
"Ŧ" => "ŧ", "Ť" => "ť", "Ţ" => "ţ",
"? " => "Å¡", "Å" => "Å", "Å" => "Å",
"Å" => "Å", "Å" => "Å", "Å" => "Å",
"Å" => "Å", "Å" => "Å", "Å" => "Å",
"Å" => "Å", "Å" => "Å", "Å" => "Å",
"Å" => "Å", "Å
" => "Å", "Å" => "Å",
"Å" => "Å", "Ä¿" => "Å", "Ľ" => "ľ",
"Ļ" => "ļ", "Ĺ" => "ĺ", "Ķ" => "ķ",
"Ĵ" => "ĵ", "IJ" => "ij", "İ" => "i",
"Ä®" => "į", "Ĭ" => "Ä", "Ī" => "Ä«",
"Ĩ" => "ĩ", "Ħ" => "ħ", "Ĥ" => "ĥ",
"Ä¢" => "Ä£", "? " => "Ä¡", "Ä" => "Ä",
"Ä" => "Ä", "Ä" => "Ä", "Ä" => "Ä",
"Ä" => "Ä", "Ä" => "Ä", "Ä" => "Ä",
"Ä" => "Ä", "Ä" => "Ä", "Ä" => "Ä",
"Ä" => "Ä", "Ä" => "Ä", "Ä" => "Ä",
"Ä" => "Ä
", "Ä" => "Ä", "Ä" => "Ä",
"Ã" => "þ", "Ã" => "ý", "Ã" => "ü",
"Ã" => "û", "Ã" => "ú", "Ã" => "ù",
"Ã" => "ø", "Ã" => "ö", "Ã" => "õ",
"Ã" => "ô", "Ã" => "ó", "Ã" => "ò",
"Ã" => "ñ", "Ã" => "ð", "Ã" => "ï",
"Ã" => "î", "Ã" => "Ã", "Ã" => "ì",
"Ã" => "ë", "Ã" => "ê", "Ã" => "é",
"Ã" => "è", "Ã" => "ç", "Ã" => "æ",
"Ã
" => "Ã¥", "Ã" => "ä", "Ã" => "ã",
"Ã" => "â", "Ã" => "á", "Ã" => "? ",
"Z" => "z", "Y" => "y", "X" => "x",
"W" => "w", "V" => "v", "U" => "u",
"T" => "t", "S" => "s", "R" => "r",
"Q" => "q", "P" => "p", "O" => "o",
"N" => "n", "M" => "m", "L" => "l",
"K" => "k", "J" => "j", "I" => "i",
"H" => "h", "G" => "g", "F" => "f",
"E" => "e", "D" => "d", "C" => "c",
"B" => "b", "A" => "a",
);
$UTF8_TABLES['strtoupper'] = array(
"ï½" => "Z", "ï½" => "ï¼¹", "ï½" => "X",
"ï½" => "ï¼·", "ï½" => "ï¼¶", "ï½" => "ï¼µ",
"ï½" => "ï¼´", "ï½" => "ï¼³", "ï½" => "ï¼²",
"ï½" => "ï¼±", "ï½" => "ï¼°", "ï½" => "O",
"ï½" => "ï¼®", "ï½" => "ï¼", "ï½" => "L",
"ï½" => "K", "ï½" => "J", "ï½" => "I",
"ï½" => "H", "ï½" => "ï¼§", "ï½" => "F",
"ï½
" => "ï¼¥", "ï½" => "D", "ï½" => "ï¼£",
"ï½" => "ï¼¢", "ï½" => "A", "ῳ" => "ῼ",
"ῥ" => "Ῥ", "ῡ" => "Ῡ", "?? " => "Ῠ",
"á¿" => "á¿", "á¿" => "á¿", "á¿" => "á¿",
"á¾¾" => "Î", "á¾³" => "á¾¼", "á¾±" => "á¾¹",
"ᾰ" => "Ᾰ", "ᾧ" => "ᾯ", "ᾦ" => "ᾮ",
"á¾¥" => "á¾", "ᾤ" => "ᾬ", "á¾£" => "ᾫ",
"ᾢ" => "ᾪ", "ᾡ" => "ᾩ", "?? " => "ᾨ",
"á¾" => "á¾", "á¾" => "á¾", "á¾" => "á¾",
"á¾" => "á¾", "á¾" => "á¾", "á¾" => "á¾",
"á¾" => "á¾", "á¾" => "á¾", "á¾" => "á¾",
"á¾" => "á¾", "á¾
" => "á¾", "á¾" => "á¾",
"á¾" => "á¾", "á¾" => "á¾", "á¾" => "á¾",
"á¾" => "á¾", "á½½" => "á¿»", "á½¼" => "Ὼ",
"ύ" => "Ύ", "ὺ" => "Ὺ", "ό" => "Ό",
"ὸ" => "Ὸ", "á½·" => "á¿", "á½¶" => "á¿",
"á½µ" => "á¿", "á½´" => "á¿", "á½³" => "á¿",
"á½²" => "á¿", "á½±" => "á¾»", "á½°" => "Ὰ",
"á½§" => "Ὧ", "ὦ" => "á½®", "á½¥" => "á½",
"ὤ" => "Ὤ", "ὣ" => "Ὣ", "ὢ" => "Ὢ",
"ὡ" => "Ὡ", "?? " => "Ὠ", "á½" => "á½",
"á½" => "á½", "á½" => "á½", "á½" => "á½",
"á½
" => "á½", "á½" => "á½", "á½" => "á½",
"á½" => "á½", "á½" => "á½", "á½" => "á½",
"ἷ" => "Ἷ", "ἶ" => "Ἶ", "ἵ" => "Ἵ",
"ἴ" => "Ἴ", "ἳ" => "Ἳ", "ἲ" => "Ἲ",
"ἱ" => "Ἱ", "ἰ" => "Ἰ", "ἧ" => "Ἧ",
"ἦ" => "á¼®", "á¼¥" => "á¼", "ἤ" => "Ἤ",
"ἣ" => "Ἣ", "ἢ" => "Ἢ", "ἡ" => "Ἡ",
"?? " => "Ἠ", "á¼" => "á¼", "á¼" => "á¼",
"á¼" => "á¼", "á¼" => "á¼", "á¼" => "á¼",
"á¼" => "á¼", "á¼" => "á¼", "á¼" => "á¼",
"á¼
" => "á¼", "á¼" => "á¼", "á¼" => "á¼",
"á¼" => "á¼", "á¼" => "á¼", "á¼" => "á¼",
"ỹ" => "Ỹ", "ỷ" => "Ỷ", "ỵ" => "Ỵ",
"ỳ" => "Ỳ", "ự" => "Ự", "ữ" => "Ữ",
"á»" => "Ử", "ừ" => "Ừ", "ứ" => "Ứ",
"ủ" => "Ủ", "ụ" => "Ụ", "ợ" => "Ợ",
"ỡ" => "?? ", "á»" => "á»", "á»" => "á»",
"á»" => "á»", "á»" => "á»", "á»" => "á»",
"á»" => "á»", "á»" => "á»", "á»" => "á»",
"á»" => "á»", "á»" => "á»", "á»" => "á»",
"á»" => "á»", "á»" => "á»", "á»
" => "á»",
"á»" => "á»", "á»" => "á»", "ế" => "Ế",
"ẽ" => "Ẽ", "ẻ" => "Ẻ", "ẹ" => "Ẹ",
"ặ" => "Ặ", "ẵ" => "Ẵ", "ẳ" => "Ẳ",
"ằ" => "Ằ", "ắ" => "Ắ", "áº" => "Ậ",
"ẫ" => "Ẫ", "ẩ" => "Ẩ", "ầ" => "Ầ",
"ấ" => "Ấ", "ả" => "Ả", "ạ" => "?? ",
"áº" => "?? ", "áº" => "áº", "áº" => "áº",
"áº" => "áº", "áº" => "áº", "áº" => "áº",
"áº" => "áº", "áº" => "áº", "áº" => "áº",
"áº
" => "áº", "áº" => "áº", "áº" => "áº",
"ṿ" => "Ṿ", "ṽ" => "Ṽ", "ṻ" => "Ṻ",
"ṹ" => "Ṹ", "ṷ" => "Ṷ", "ṵ" => "Ṵ",
"ṳ" => "Ṳ", "ṱ" => "Ṱ", "ṯ" => "Ṯ",
"á¹" => "Ṭ", "ṫ" => "Ṫ", "ṩ" => "Ṩ",
"ṧ" => "Ṧ", "ṥ" => "Ṥ", "ṣ" => "Ṣ",
"ṡ" => "?? ", "á¹" => "á¹", "á¹" => "á¹",
"á¹" => "á¹", "á¹" => "á¹", "á¹" => "á¹",
"á¹" => "á¹", "á¹" => "á¹", "á¹" => "á¹",
"á¹" => "á¹", "á¹" => "á¹", "á¹" => "á¹",
"á¹" => "á¹", "á¹" => "á¹", "á¹
" => "á¹",
"á¹" => "á¹", "á¹" => "á¹", "ḿ" => "Ḿ",
"ḽ" => "Ḽ", "ḻ" => "Ḻ", "ḹ" => "Ḹ",
"ḷ" => "Ḷ", "ḵ" => "Ḵ", "ḳ" => "Ḳ",
"ḱ" => "Ḱ", "ḯ" => "Ḯ", "á¸" => "Ḭ",
"ḫ" => "Ḫ", "ḩ" => "Ḩ", "ḧ" => "Ḧ",
"ḥ" => "Ḥ", "ḣ" => "Ḣ", "ḡ" => "?? ",
"á¸" => "á¸", "á¸" => "á¸", "á¸" => "á¸",
"á¸" => "á¸", "á¸" => "á¸", "á¸" => "á¸",
"á¸" => "á¸", "á¸" => "á¸", "á¸" => "á¸",
"á¸" => "á¸", "á¸" => "á¸", "á¸" => "á¸",
"á¸" => "á¸", "á¸
" => "á¸", "á¸" => "á¸",
"á¸" => "á¸", "Ö" => "Õ", "Ö
" => "Õ",
"Ö" => "Õ", "Ö" => "Õ", "Ö" => "Õ",
"Ö" => "Õ", "Ö" => "Õ", "Õ¿" => "Õ",
"Õ¾" => "Õ", "Õ½" => "Õ", "Õ¼" => "Õ",
"Õ»" => "Õ", "Õº" => "Õ", "Õ¹" => "Õ",
"Õ¸" => "Õ", "Õ·" => "Õ", "Õ¶" => "Õ",
"Õµ" => "Õ
", "Õ´" => "Õ", "Õ³" => "Õ",
"Õ²" => "Õ", "Õ±" => "Õ", "Õ°" => "Õ",
"Õ¯" => "Ô¿", "Õ®" => "Ô¾", "Õ" => "Ô½",
"Õ¬" => "Ô¼", "Õ«" => "Ô»", "Õª" => "Ôº",
"Õ©" => "Ô¹", "Õ¨" => "Ô¸", "Õ§" => "Ô·",
"Õ¦" => "Ô¶", "Õ¥" => "Ôµ", "Õ¤" => "Ô´",
"Õ£" => "Ô³", "Õ¢" => "Ô²", "Õ¡" => "Ô±",
"Ô" => "Ô", "Ô" => "Ô", "Ô" => "Ô",
"Ô" => "Ô", "Ô" => "Ô", "Ô
" => "Ô",
"Ô" => "Ô", "Ô" => "Ô", "Ó¹" => "Ó¸",
"Óµ" => "Ó´", "Ó³" => "Ó²", "Ó±" => "Ó°",
"Ó¯" => "Ó®", "Ó" => "Ó¬", "Ó«" => "Óª",
"Ó©" => "Ó¨", "Ó§" => "Ó¦", "Ó¥" => "Ó¤",
"Ó£" => "Ó¢", "Ó¡" => "? ", "Ó" => "Ó",
"Ó" => "Ó", "Ó" => "Ó", "Ó" => "Ó",
"Ó" => "Ó", "Ó" => "Ó", "Ó" => "Ó",
"Ó" => "Ó", "Ó" => "Ó", "Ó" => "Ó",
"Ó" => "Ó", "Ó" => "Ó", "Ó" => "Ó
",
"Ó" => "Ó", "Ó" => "Ó", "Ò¿" => "Ò¾",
"Ò½" => "Ò¼", "Ò»" => "Òº", "Ò¹" => "Ò¸",
"Ò·" => "Ò¶", "Òµ" => "Ò´", "Ò³" => "Ò²",
"Ò±" => "Ò°", "Ò¯" => "Ò®", "Ò" => "Ò¬",
"Ò«" => "Òª", "Ò©" => "Ò¨", "Ò§" => "Ò¦",
"Ò¥" => "Ò¤", "Ò£" => "Ò¢", "Ò¡" => "? ",
"Ò" => "Ò", "Ò" => "Ò", "Ò" => "Ò",
"Ò" => "Ò", "Ò" => "Ò", "Ò" => "Ò",
"Ò" => "Ò", "Ò" => "Ò", "Ò" => "Ò",
"Ò" => "Ò", "Ò" => "Ò", "Ò" => "Ò",
"ѿ" => "Ѿ", "ѽ" => "Ѽ", "ѻ" => "Ѻ",
"ѹ" => "Ѹ", "ѷ" => "Ѷ", "ѵ" => "Ѵ",
"ѳ" => "Ѳ", "ѱ" => "Ѱ", "ѯ" => "Ѯ",
"Ñ" => "Ѭ", "Ñ«" => "Ѫ", "Ñ©" => "Ѩ",
"ѧ" => "Ѧ", "ѥ" => "Ѥ", "ѣ" => "Ѣ",
"Ñ¡" => "? ", "Ñ" => "Ð", "Ñ" => "Ð",
"Ñ" => "Ð", "Ñ" => "Ð", "Ñ" => "Ð",
"Ñ" => "Ð", "Ñ" => "Ð", "Ñ" => "Ð",
"Ñ" => "Ð", "Ñ" => "Ð", "Ñ" => "Ð
",
"Ñ" => "Ð", "Ñ" => "Ð", "Ñ" => "Ð",
"Ñ" => "Ð", "Ñ" => "Ð", "Ñ" => "Я",
"Ñ" => "Ю", "Ñ" => "Ð", "Ñ" => "Ь",
"Ñ" => "Ы", "Ñ" => "Ъ", "Ñ" => "Щ",
"Ñ" => "Ш", "Ñ" => "Ч", "Ñ" => "Ц",
"Ñ
" => "Ð¥", "Ñ" => "Ф", "Ñ" => "У",
"Ñ" => "Т", "Ñ" => "С", "Ñ" => "? ",
"п" => "Ð", "о" => "Ð", "н" => "Ð",
"м" => "Ð", "л" => "Ð", "к" => "Ð",
"й" => "Ð", "и" => "Ð", "з" => "Ð",
"ж" => "Ð", "е" => "Ð", "д" => "Ð",
"г" => "Ð", "в" => "Ð", "б" => "Ð",
"а" => "Ð", "ϵ" => "Î", "ϲ" => "Σ",
"ϱ" => "Ρ", "ϰ" => "Î", "ϯ" => "Ï®",
"Ï" => "Ϭ", "Ï«" => "Ϫ", "Ï©" => "Ϩ",
"ϧ" => "Ϧ", "ϥ" => "Ϥ", "ϣ" => "Ϣ",
"Ï¡" => "? ", "Ï" => "Ï", "Ï" => "Ï",
"Ï" => "Ï", "Ï" => "Ï", "Ï" => "? ",
"Ï" => "Φ", "Ï" => "Î", "Ï" => "Î",
"Ï" => "Î", "Ï" => "Î", "Ï" => "Î",
"Ï" => "Ϋ", "Ï" => "Ϊ", "Ï" => "Ω",
"Ï" => "Ψ", "Ï" => "Χ", "Ï" => "Φ",
"Ï
" => "Î¥", "Ï" => "Τ", "Ï" => "Σ",
"Ï" => "Σ", "Ï" => "Ρ", "Ï" => "? ",
"ο" => "Î", "ξ" => "Î", "ν" => "Î",
"μ" => "Î", "λ" => "Î", "κ" => "Î",
"ι" => "Î", "θ" => "Î", "η" => "Î",
"ζ" => "Î", "ε" => "Î", "δ" => "Î",
"γ" => "Î", "β" => "Î", "α" => "Î",
"ί" => "Î", "ή" => "Î", "Î" => "Î",
"ά" => "Î", "Ê" => "Æ·", "Ê" => "Ʋ",
"Ê" => "Ʊ", "Ê" => "Æ®", "Ê" => "Æ©",
"Ê" => "Ʀ", "ɵ" => "Æ", "ɲ" => "Æ",
"ɯ" => "Æ", "É©" => "Æ", "ɨ" => "Æ",
"É£" => "Æ", "? " => "Æ", "É" => "Æ",
"É" => "Æ", "É" => "Æ", "É" => "Æ",
"É" => "Æ", "É" => "Æ", "ȳ" => "Ȳ",
"ȱ" => "Ȱ", "ȯ" => "È®", "È" => "Ȭ",
"ȫ" => "Ȫ", "ȩ" => "Ȩ", "ȧ" => "Ȧ",
"È¥" => "Ȥ", "È£" => "È¢", "È" => "È",
"È" => "È", "È" => "È", "È" => "È",
"È" => "È", "È" => "È", "È" => "È",
"È" => "È", "È" => "È", "È" => "È",
"È" => "È", "È" => "È", "È" => "È",
"È
" => "È", "È" => "È", "È" => "È",
"ǿ" => "Ǿ", "ǽ" => "Ǽ", "ǻ" => "Ǻ",
"ǹ" => "Ǹ", "ǵ" => "Ǵ", "dz" => "Dz",
"ǯ" => "Ç®", "Ç" => "Ǭ", "Ç«" => "Ǫ",
"ǩ" => "Ǩ", "ǧ" => "Ǧ", "ǥ" => "Ǥ",
"Ç£" => "Ç¢", "Ç¡" => "? ", "Ç" => "Ç",
"Ç" => "Æ", "Ç" => "Ç", "Ç" => "Ç",
"Ç" => "Ç", "Ç" => "Ç", "Ç" => "Ç",
"Ç" => "Ç", "Ç" => "Ç", "Ç" => "Ç",
"Ç" => "Ç", "Ç" => "Ç", "Ç" => "Ç
",
"ƿ" => "Ƿ", "ƽ" => "Ƽ", "ƹ" => "Ƹ",
"ƶ" => "Ƶ", "ƴ" => "Ƴ", "ư" => "Ư",
"Æ" => "Ƭ", "ƨ" => "Ƨ", "Æ¥" => "Ƥ",
"Æ£" => "Æ¢", "Æ¡" => "? ", "Æ" => "? ",
"Æ" => "Æ", "Æ" => "Ƕ", "Æ" => "Æ",
"Æ" => "Æ", "Æ" => "Æ", "Æ
" => "Æ",
"Æ" => "Æ", "Å¿" => "S", "ž" => "Ž",
"ż" => "Ż", "ź" => "Ź", "ŷ" => "Ŷ",
"ŵ" => "Ŵ", "ų" => "Ų", "ű" => "Ű",
"ů" => "Å®", "Å" => "Ŭ", "Å«" => "Ū",
"ũ" => "Ũ", "ŧ" => "Ŧ", "ť" => "Ť",
"Å£" => "Å¢", "Å¡" => "? ", "Å" => "Å",
"Å" => "Å", "Å" => "Å", "Å" => "Å",
"Å" => "Å", "Å" => "Å", "Å" => "Å",
"Å" => "Å", "Å" => "Å", "Å" => "Å",
"Å" => "Å", "Å" => "Å", "Å" => "Å
",
"Å" => "Å", "Å" => "Å", "Å" => "Ä¿",
"ľ" => "Ľ", "ļ" => "Ļ", "ĺ" => "Ĺ",
"ķ" => "Ķ", "ĵ" => "Ĵ", "ij" => "IJ",
"ı" => "I", "į" => "Ä®", "Ä" => "Ĭ",
"ī" => "Ī", "ĩ" => "Ĩ", "ħ" => "Ħ",
"ĥ" => "Ĥ", "ģ" => "Ģ", "ġ" => "? ",
"Ä" => "Ä", "Ä" => "Ä", "Ä" => "Ä",
"Ä" => "Ä", "Ä" => "Ä", "Ä" => "Ä",
"Ä" => "Ä", "Ä" => "Ä", "Ä" => "Ä",
"Ä" => "Ä", "Ä" => "Ä", "Ä" => "Ä",
"Ä" => "Ä", "Ä
" => "Ä", "Ä" => "Ä",
"Ä" => "Ä", "ÿ" => "Ÿ", "þ" => "Ã",
"ý" => "Ã", "ü" => "Ã", "û" => "Ã",
"ú" => "Ã", "ù" => "Ã", "ø" => "Ã",
"ö" => "Ã", "õ" => "Ã", "ô" => "Ã",
"ó" => "Ã", "ò" => "Ã", "ñ" => "Ã",
"ð" => "Ã", "ï" => "Ã", "î" => "Ã",
"Ã" => "Ã", "ì" => "Ã", "ë" => "Ã",
"ê" => "Ã", "é" => "Ã", "è" => "Ã",
"ç" => "Ã", "æ" => "Ã", "Ã¥" => "Ã
",
"ä" => "Ã", "ã" => "Ã", "â" => "Ã",
"á" => "Ã", "? " => "Ã", "µ" => "Î",
"z" => "Z", "y" => "Y", "x" => "X",
"w" => "W", "v" => "V", "u" => "U",
"t" => "T", "s" => "S", "r" => "R",
"q" => "Q", "p" => "P", "o" => "O",
"n" => "N", "m" => "M", "l" => "L",
"k" => "K", "j" => "J", "i" => "I",
"h" => "H", "g" => "G", "f" => "F",
"e" => "E", "d" => "D", "c" => "C",
"b" => "B", "a" => "A",
);