diff options
| author | David M <davidmj@users.sourceforge.net> | 2008-01-08 06:44:05 +0000 | 
|---|---|---|
| committer | David M <davidmj@users.sourceforge.net> | 2008-01-08 06:44:05 +0000 | 
| commit | 370e189f156730f3ea602052737fb6995c85c23c (patch) | |
| tree | dac369961ff10f5a31f6ad40318afb8702b31e4d /phpBB/includes | |
| parent | b4e64655afc6279d7c64a952ee5f43fe65751c19 (diff) | |
| download | forums-370e189f156730f3ea602052737fb6995c85c23c.tar forums-370e189f156730f3ea602052737fb6995c85c23c.tar.gz forums-370e189f156730f3ea602052737fb6995c85c23c.tar.bz2 forums-370e189f156730f3ea602052737fb6995c85c23c.tar.xz forums-370e189f156730f3ea602052737fb6995c85c23c.zip  | |
- make viewforum work again
- remove the lower case functions, they were stupid anyway
- added some indexes
- added a group_name_clean column
git-svn-id: file:///svn/phpbb/trunk@8315 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/includes')
| -rw-r--r-- | phpBB/includes/acp/acp_attachments.php | 17 | ||||
| -rw-r--r-- | phpBB/includes/acp/acp_bots.php | 2 | ||||
| -rw-r--r-- | phpBB/includes/acp/acp_email.php | 2 | ||||
| -rw-r--r-- | phpBB/includes/auth/auth_apache.php | 2 | ||||
| -rw-r--r-- | phpBB/includes/auth/auth_ldap.php | 2 | ||||
| -rw-r--r-- | phpBB/includes/db/db_tools.php | 4 | ||||
| -rw-r--r-- | phpBB/includes/functions_convert.php | 11 | ||||
| -rw-r--r-- | phpBB/includes/functions_user.php | 15 | ||||
| -rw-r--r-- | phpBB/includes/utf/utf_tools.php | 175 | 
9 files changed, 33 insertions, 197 deletions
diff --git a/phpBB/includes/acp/acp_attachments.php b/phpBB/includes/acp/acp_attachments.php index 08b5f863e0..8e43361ba1 100644 --- a/phpBB/includes/acp/acp_attachments.php +++ b/phpBB/includes/acp/acp_attachments.php @@ -479,14 +479,21 @@ class acp_attachments  					// Check New Group Name  					if ($new_group_name)  					{ -						$sql = 'SELECT group_id -							FROM ' . EXTENSION_GROUPS_TABLE . " -							WHERE LOWER(group_name) = '" . $db->sql_escape(utf8_strtolower($new_group_name)) . "'"; +						$sql = 'SELECT group_name +							FROM ' . EXTENSION_GROUPS_TABLE;  						$result = $db->sql_query($sql); +						$ext_row = $db->sql_fetchrow($result); +						$db->sql_freeresult($result); + +						$clean_group_name = utf8_clean_string($new_group_name); -						if ($db->sql_fetchrow($result)) +						while ($row = $db->sql_fetchrow($result))  						{ -							$error[] = sprintf($user->lang['EXTENSION_GROUP_EXIST'], $new_group_name); +							if (utf8_clean_string($row['group_name']) === $clean_group_name) +							{ +								$error[] = sprintf($user->lang['EXTENSION_GROUP_EXIST'], $new_group_name); +								break; +							}  						}  						$db->sql_freeresult($result);  					} diff --git a/phpBB/includes/acp/acp_bots.php b/phpBB/includes/acp/acp_bots.php index d08cabb062..81ac239358 100644 --- a/phpBB/includes/acp/acp_bots.php +++ b/phpBB/includes/acp/acp_bots.php @@ -210,7 +210,7 @@ class acp_bots  						{  							$sql = 'SELECT group_id, group_colour  								FROM ' . GROUPS_TABLE . " -								WHERE group_name = 'BOTS' +								WHERE group_name_clean = 'bots'  									AND group_type = " . GROUP_SPECIAL;  							$result = $db->sql_query($sql);  							$group_row = $db->sql_fetchrow($result); diff --git a/phpBB/includes/acp/acp_email.php b/phpBB/includes/acp/acp_email.php index 125908c296..c964530c32 100644 --- a/phpBB/includes/acp/acp_email.php +++ b/phpBB/includes/acp/acp_email.php @@ -227,7 +227,7 @@ class acp_email  		// Exclude bots and guests...  		$sql = 'SELECT group_id  			FROM ' . GROUPS_TABLE . " -			WHERE group_name IN ('BOTS', 'GUESTS')"; +			WHERE group_name_clean IN ('bots', 'guests')";  		$result = $db->sql_query($sql);  		$exclude = array(); diff --git a/phpBB/includes/auth/auth_apache.php b/phpBB/includes/auth/auth_apache.php index ed3951dd7b..50a49ee21e 100644 --- a/phpBB/includes/auth/auth_apache.php +++ b/phpBB/includes/auth/auth_apache.php @@ -188,7 +188,7 @@ function user_row_apache($username, $password)  	// first retrieve default group id  	$sql = 'SELECT group_id  		FROM ' . GROUPS_TABLE . " -		WHERE group_name = '" . $db->sql_escape('REGISTERED') . "' +		WHERE group_name_clean = '" . $db->sql_escape('registered') . "'  			AND group_type = " . GROUP_SPECIAL;  	$result = $db->sql_query($sql);  	$row = $db->sql_fetchrow($result); diff --git a/phpBB/includes/auth/auth_ldap.php b/phpBB/includes/auth/auth_ldap.php index 472927ace3..9507dc645a 100644 --- a/phpBB/includes/auth/auth_ldap.php +++ b/phpBB/includes/auth/auth_ldap.php @@ -198,7 +198,7 @@ function login_ldap(&$username, &$password)  				// retrieve default group id  				$sql = 'SELECT group_id  					FROM ' . GROUPS_TABLE . " -					WHERE group_name = '" . $db->sql_escape('REGISTERED') . "' +					WHERE group_name_clean = '" . $db->sql_escape('registered') . "'  						AND group_type = " . GROUP_SPECIAL;  				$result = $db->sql_query($sql);  				$row = $db->sql_fetchrow($result); diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index e90e84f348..5786b40abe 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -214,7 +214,7 @@ class phpbb_db_tools  			'UINT'		=> 'INT4', // unsigned  			'UINT:'		=> 'INT4', // unsigned  			'USINT'		=> 'INT2', // unsigned -			'BOOL'		=> 'INT2', // unsigned +			'BOOL'		=> 'boolean', // unsigned  			'TINT:'		=> 'INT2',  			'VCHAR'		=> 'varchar(255)',  			'VCHAR:'	=> 'varchar(%d)', @@ -234,7 +234,7 @@ class phpbb_db_tools  			'PDECIMAL:'	=> 'decimal(%d,3)',  			'VCHAR_UNI'	=> 'varchar(255)',  			'VCHAR_UNI:'=> 'varchar(%d)', -			'VCHAR_CI'	=> 'varchar_ci', +			'VCHAR_CI'	=> 'varchar(255)',  			'VARBINARY'	=> 'bytea',  		),  	); diff --git a/phpBB/includes/functions_convert.php b/phpBB/includes/functions_convert.php index 7498882e7c..cbf5bdbac2 100644 --- a/phpBB/includes/functions_convert.php +++ b/phpBB/includes/functions_convert.php @@ -1141,7 +1141,7 @@ function user_group_auth($group, $select_query, $use_src_db)  	$sql = 'SELECT group_id  		FROM ' . GROUPS_TABLE . " -		WHERE group_name = '" . $db->sql_escape(strtoupper($group)) . "'"; +		WHERE group_name_clean = '" . $db->sql_escape(utf8_clean_string($group)) . "'";  	$result = $db->sql_query($sql);  	$group_id = (int) $db->sql_fetchfield('group_id');  	$db->sql_freeresult($result); @@ -1474,7 +1474,7 @@ function mass_auth($ug_type, $forum_id, $ug_id, $acl_list, $setting = ACL_NO)  		{  			$sql = 'SELECT group_id  				FROM ' . GROUPS_TABLE . " -				WHERE group_name = '" . $db->sql_escape(strtoupper($ug_id)) . "'"; +				WHERE group_name_clean = '" . $db->sql_escape(utf8_clean_string($ug_id)) . "'";  			$result = $db->sql_query_limit($sql, 1);  			$id = (int) $db->sql_fetchfield('group_id');  			$db->sql_freeresult($result); @@ -1702,7 +1702,7 @@ function add_default_groups()  	$sql = 'SELECT *  		FROM ' . GROUPS_TABLE . ' -		WHERE ' . $db->sql_in_set('group_name', array_keys($default_groups)); +		WHERE ' . $db->sql_in_set('group_name_clean', array_map('utf8_clean_string', array_keys($default_groups));  	$result = $db->sql_query($sql);  	while ($row = $db->sql_fetchrow($result)) @@ -1717,6 +1717,7 @@ function add_default_groups()  	{  		$sql_ary[] = array(  			'group_name'			=> (string) $name, +			'group_name_clean'		=> (string) utf8_clean_string($name),  			'group_desc'			=> '',  			'group_desc_uid'		=> '',  			'group_desc_bitfield'	=> '', @@ -1766,7 +1767,7 @@ function add_bots()  	$db->sql_query($convert->truncate_statement . BOTS_TABLE); -	$sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " WHERE group_name = 'BOTS'"; +	$sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " WHERE group_name_clean = 'bots'";  	$result = $db->sql_query($sql);  	$group_id = (int) $db->sql_fetchfield('group_id', false, $result);  	$db->sql_freeresult($result); @@ -1775,7 +1776,7 @@ function add_bots()  	{  		add_default_groups(); -		$sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " WHERE group_name = 'BOTS'"; +		$sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " WHERE group_name_clean = 'bots'";  		$result = $db->sql_query($sql);  		$group_id = (int) $db->sql_fetchfield('group_id', false, $result);  		$db->sql_freeresult($result); diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index bacb4462c6..f9277d62a2 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -1405,7 +1405,7 @@ function validate_username($username, $allowed_username = false)  	$sql = 'SELECT group_name  		FROM ' . GROUPS_TABLE . " -		WHERE LOWER(group_name) = '" . $db->sql_escape(utf8_strtolower($username)) . "'"; +		WHERE group_name = '" . $db->sql_escape($clean_username) . "'";  	$result = $db->sql_query($sql);  	$row = $db->sql_fetchrow($result);  	$db->sql_freeresult($result); @@ -2297,6 +2297,7 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow  		$user_ary = array();  		$sql_ary = array(  			'group_name'			=> (string) $name, +			'group_name_clean'		=> (string) utf8_clean_string($name),  			'group_desc'			=> (string) $desc,  			'group_desc_uid'		=> '',  			'group_desc_bitfield'	=> '', @@ -2637,9 +2638,11 @@ function group_user_del($group_id, $user_id_ary = false, $username_ary = false,  		return 'NO_USER';  	} +	$clean_group_order = array_map('utf8_clean_string', $group_order); +  	$sql = 'SELECT *  		FROM ' . GROUPS_TABLE . ' -		WHERE ' . $db->sql_in_set('group_name', $group_order); +		WHERE ' . $db->sql_in_set('group_name_clean', $clean_group_order);  	$result = $db->sql_query($sql);  	$group_order_id = $special_group_data = array(); @@ -2679,7 +2682,7 @@ function group_user_del($group_id, $user_id_ary = false, $username_ary = false,  	$db->sql_freeresult($result);  	// What special group memberships exist for these users? -	$sql = 'SELECT g.group_id, g.group_name, ug.user_id +	$sql = 'SELECT g.group_id, g.group_name_clean, ug.user_id  		FROM ' . USER_GROUP_TABLE . ' ug, ' . GROUPS_TABLE . ' g  		WHERE ' . $db->sql_in_set('ug.user_id', $user_id_ary) . "  			AND g.group_id = ug.group_id @@ -2691,7 +2694,7 @@ function group_user_del($group_id, $user_id_ary = false, $username_ary = false,  	$temp_ary = array();  	while ($row = $db->sql_fetchrow($result))  	{ -		if ($default_groups[$row['user_id']] == $group_id && (!isset($temp_ary[$row['user_id']]) || array_search($row['group_name'], $group_order) < $temp_ary[$row['user_id']])) +		if ($default_groups[$row['user_id']] == $group_id && (!isset($temp_ary[$row['user_id']]) || array_search($row['group_name_clean'], $clean_group_order) < $temp_ary[$row['user_id']]))  		{  			$temp_ary[$row['user_id']] = $row['group_id'];  		} @@ -2953,7 +2956,7 @@ function group_validate_groupname($group_id, $group_name)  	if (!empty($group_id))  	{ -		$sql = 'SELECT group_name +		$sql = 'SELECT group_name_clean  			FROM ' . GROUPS_TABLE . '  			WHERE group_id = ' . (int) $group_id;  		$result = $db->sql_query($sql); @@ -2975,7 +2978,7 @@ function group_validate_groupname($group_id, $group_name)  	$sql = 'SELECT group_name  		FROM ' . GROUPS_TABLE . " -		WHERE LOWER(group_name) = '" . $db->sql_escape(utf8_strtolower($group_name)) . "'"; +		WHERE group_name_clean = '" . $db->sql_escape(utf8_clean_string($group_name)) . "'";  	$result = $db->sql_query($sql);  	$row = $db->sql_fetchrow($result);  	$db->sql_freeresult($result); diff --git a/phpBB/includes/utf/utf_tools.php b/phpBB/includes/utf/utf_tools.php index e2ef3edd0e..1a4446ca65 100644 --- a/phpBB/includes/utf/utf_tools.php +++ b/phpBB/includes/utf/utf_tools.php @@ -193,24 +193,6 @@ if (extension_loaded('mbstring'))  	}  	/** -	* UTF-8 aware alternative to strtolower -	* @ignore -	*/ -	function utf8_strtolower($str) -	{ -		return mb_strtolower($str); -	} - -	/** -	* UTF-8 aware alternative to strtoupper -	* @ignore -	*/ -	function utf8_strtoupper($str) -	{ -		return mb_strtoupper($str); -	} - -	/**  	* UTF-8 aware alternative to substr  	* @ignore  	*/ @@ -323,136 +305,6 @@ else  	}  	/** -	* UTF-8 aware alternative to strtolower -	* Make a string lowercase -	* Note: The concept of a characters "case" only exists is some alphabets -	* such as Latin, Greek, Cyrillic, Armenian and archaic Georgian - it does -	* not exist in the Chinese alphabet, for example. See Unicode Standard -	* Annex #21: Case Mappings -	* -	* @param string -	* @return string string in lowercase -	*/ -	function utf8_strtolower($string) -	{ -		static $utf8_upper_to_lower = array( -			"\xC3\x80" => "\xC3\xA0", "\xC3\x81" => "\xC3\xA1", -			"\xC3\x82" => "\xC3\xA2", "\xC3\x83" => "\xC3\xA3", "\xC3\x84" => "\xC3\xA4", "\xC3\x85" => "\xC3\xA5", -			"\xC3\x86" => "\xC3\xA6", "\xC3\x87" => "\xC3\xA7", "\xC3\x88" => "\xC3\xA8", "\xC3\x89" => "\xC3\xA9", -			"\xC3\x8A" => "\xC3\xAA", "\xC3\x8B" => "\xC3\xAB", "\xC3\x8C" => "\xC3\xAC", "\xC3\x8D" => "\xC3\xAD", -			"\xC3\x8E" => "\xC3\xAE", "\xC3\x8F" => "\xC3\xAF", "\xC3\x90" => "\xC3\xB0", "\xC3\x91" => "\xC3\xB1", -			"\xC3\x92" => "\xC3\xB2", "\xC3\x93" => "\xC3\xB3", "\xC3\x94" => "\xC3\xB4", "\xC3\x95" => "\xC3\xB5", -			"\xC3\x96" => "\xC3\xB6", "\xC3\x98" => "\xC3\xB8", "\xC3\x99" => "\xC3\xB9", "\xC3\x9A" => "\xC3\xBA", -			"\xC3\x9B" => "\xC3\xBB", "\xC3\x9C" => "\xC3\xBC", "\xC3\x9D" => "\xC3\xBD", "\xC3\x9E" => "\xC3\xBE", -			"\xC4\x80" => "\xC4\x81", "\xC4\x82" => "\xC4\x83", "\xC4\x84" => "\xC4\x85", "\xC4\x86" => "\xC4\x87", -			"\xC4\x88" => "\xC4\x89", "\xC4\x8A" => "\xC4\x8B", "\xC4\x8C" => "\xC4\x8D", "\xC4\x8E" => "\xC4\x8F", -			"\xC4\x90" => "\xC4\x91", "\xC4\x92" => "\xC4\x93", "\xC4\x96" => "\xC4\x97", "\xC4\x98" => "\xC4\x99", -			"\xC4\x9A" => "\xC4\x9B", "\xC4\x9C" => "\xC4\x9D", "\xC4\x9E" => "\xC4\x9F", "\xC4\xA0" => "\xC4\xA1", -			"\xC4\xA2" => "\xC4\xA3", "\xC4\xA4" => "\xC4\xA5", "\xC4\xA6" => "\xC4\xA7", "\xC4\xA8" => "\xC4\xA9", -			"\xC4\xAA" => "\xC4\xAB", "\xC4\xAE" => "\xC4\xAF", "\xC4\xB4" => "\xC4\xB5", "\xC4\xB6" => "\xC4\xB7", -			"\xC4\xB9" => "\xC4\xBA", "\xC4\xBB" => "\xC4\xBC", "\xC4\xBD" => "\xC4\xBE", "\xC5\x81" => "\xC5\x82", -			"\xC5\x83" => "\xC5\x84", "\xC5\x85" => "\xC5\x86", "\xC5\x87" => "\xC5\x88", "\xC5\x8A" => "\xC5\x8B", -			"\xC5\x8C" => "\xC5\x8D", "\xC5\x90" => "\xC5\x91", "\xC5\x94" => "\xC5\x95", "\xC5\x96" => "\xC5\x97", -			"\xC5\x98" => "\xC5\x99", "\xC5\x9A" => "\xC5\x9B", "\xC5\x9C" => "\xC5\x9D", "\xC5\x9E" => "\xC5\x9F", -			"\xC5\xA0" => "\xC5\xA1", "\xC5\xA2" => "\xC5\xA3", "\xC5\xA4" => "\xC5\xA5", "\xC5\xA6" => "\xC5\xA7", -			"\xC5\xA8" => "\xC5\xA9", "\xC5\xAA" => "\xC5\xAB", "\xC5\xAC" => "\xC5\xAD", "\xC5\xAE" => "\xC5\xAF", -			"\xC5\xB0" => "\xC5\xB1", "\xC5\xB2" => "\xC5\xB3", "\xC5\xB4" => "\xC5\xB5", "\xC5\xB6" => "\xC5\xB7", -			"\xC5\xB8" => "\xC3\xBF", "\xC5\xB9" => "\xC5\xBA", "\xC5\xBB" => "\xC5\xBC", "\xC5\xBD" => "\xC5\xBE", -			"\xC6\xA0" => "\xC6\xA1", "\xC6\xAF" => "\xC6\xB0", "\xC8\x98" => "\xC8\x99", "\xC8\x9A" => "\xC8\x9B", -			"\xCE\x86" => "\xCE\xAC", "\xCE\x88" => "\xCE\xAD", "\xCE\x89" => "\xCE\xAE", "\xCE\x8A" => "\xCE\xAF", -			"\xCE\x8C" => "\xCF\x8C", "\xCE\x8E" => "\xCF\x8D", "\xCE\x8F" => "\xCF\x8E", "\xCE\x91" => "\xCE\xB1", -			"\xCE\x92" => "\xCE\xB2", "\xCE\x93" => "\xCE\xB3", "\xCE\x94" => "\xCE\xB4", "\xCE\x95" => "\xCE\xB5", -			"\xCE\x96" => "\xCE\xB6", "\xCE\x97" => "\xCE\xB7", "\xCE\x98" => "\xCE\xB8", "\xCE\x99" => "\xCE\xB9", -			"\xCE\x9A" => "\xCE\xBA", "\xCE\x9B" => "\xCE\xBB", "\xCE\x9C" => "\xCE\xBC", "\xCE\x9D" => "\xCE\xBD", -			"\xCE\x9E" => "\xCE\xBE", "\xCE\x9F" => "\xCE\xBF", "\xCE\xA0" => "\xCF\x80", "\xCE\xA1" => "\xCF\x81", -			"\xCE\xA3" => "\xCF\x83", "\xCE\xA4" => "\xCF\x84", "\xCE\xA5" => "\xCF\x85", "\xCE\xA6" => "\xCF\x86", -			"\xCE\xA7" => "\xCF\x87", "\xCE\xA8" => "\xCF\x88", "\xCE\xA9" => "\xCF\x89", "\xCE\xAA" => "\xCF\x8A", -			"\xCE\xAB" => "\xCF\x8B", "\xD0\x81" => "\xD1\x91", "\xD0\x82" => "\xD1\x92", "\xD0\x83" => "\xD1\x93", -			"\xD0\x84" => "\xD1\x94", "\xD0\x85" => "\xD1\x95", "\xD0\x86" => "\xD1\x96", "\xD0\x87" => "\xD1\x97", -			"\xD0\x88" => "\xD1\x98", "\xD0\x89" => "\xD1\x99", "\xD0\x8A" => "\xD1\x9A", "\xD0\x8B" => "\xD1\x9B", -			"\xD0\x8C" => "\xD1\x9C", "\xD0\x8E" => "\xD1\x9E", "\xD0\x8F" => "\xD1\x9F", "\xD0\x90" => "\xD0\xB0", -			"\xD0\x91" => "\xD0\xB1", "\xD0\x92" => "\xD0\xB2", "\xD0\x93" => "\xD0\xB3", "\xD0\x94" => "\xD0\xB4", -			"\xD0\x95" => "\xD0\xB5", "\xD0\x96" => "\xD0\xB6", "\xD0\x97" => "\xD0\xB7", "\xD0\x98" => "\xD0\xB8", -			"\xD0\x99" => "\xD0\xB9", "\xD0\x9A" => "\xD0\xBA", "\xD0\x9B" => "\xD0\xBB", "\xD0\x9C" => "\xD0\xBC", -			"\xD0\x9D" => "\xD0\xBD", "\xD0\x9E" => "\xD0\xBE", "\xD0\x9F" => "\xD0\xBF", "\xD0\xA0" => "\xD1\x80", -			"\xD0\xA1" => "\xD1\x81", "\xD0\xA2" => "\xD1\x82", "\xD0\xA3" => "\xD1\x83", "\xD0\xA4" => "\xD1\x84", -			"\xD0\xA5" => "\xD1\x85", "\xD0\xA6" => "\xD1\x86", "\xD0\xA7" => "\xD1\x87", "\xD0\xA8" => "\xD1\x88", -			"\xD0\xA9" => "\xD1\x89", "\xD0\xAA" => "\xD1\x8A", "\xD0\xAB" => "\xD1\x8B", "\xD0\xAC" => "\xD1\x8C", -			"\xD0\xAD" => "\xD1\x8D", "\xD0\xAE" => "\xD1\x8E", "\xD0\xAF" => "\xD1\x8F", "\xD2\x90" => "\xD2\x91", -			"\xE1\xB8\x82" => "\xE1\xB8\x83", "\xE1\xB8\x8A" => "\xE1\xB8\x8B", "\xE1\xB8\x9E" => "\xE1\xB8\x9F", "\xE1\xB9\x80" => "\xE1\xB9\x81", -			"\xE1\xB9\x96" => "\xE1\xB9\x97", "\xE1\xB9\xA0" => "\xE1\xB9\xA1", "\xE1\xB9\xAA" => "\xE1\xB9\xAB", "\xE1\xBA\x80" => "\xE1\xBA\x81", -			"\xE1\xBA\x82" => "\xE1\xBA\x83", "\xE1\xBA\x84" => "\xE1\xBA\x85", "\xE1\xBB\xB2" => "\xE1\xBB\xB3" -		); - -		return strtr(strtolower($string), $utf8_upper_to_lower); -	} - -	/** -	* UTF-8 aware alternative to strtoupper -	* Make a string uppercase -	* Note: The concept of a characters "case" only exists is some alphabets -	* such as Latin, Greek, Cyrillic, Armenian and archaic Georgian - it does -	* not exist in the Chinese alphabet, for example. See Unicode Standard -	* Annex #21: Case Mappings -	* -	* @param string -	* @return string string in uppercase -	*/ -	function utf8_strtoupper($string) -	{ -		static $utf8_lower_to_upper = array( -			"\xC3\xA0" => "\xC3\x80", "\xC3\xA1" => "\xC3\x81", -			"\xC3\xA2" => "\xC3\x82", "\xC3\xA3" => "\xC3\x83", "\xC3\xA4" => "\xC3\x84", "\xC3\xA5" => "\xC3\x85", -			"\xC3\xA6" => "\xC3\x86", "\xC3\xA7" => "\xC3\x87", "\xC3\xA8" => "\xC3\x88", "\xC3\xA9" => "\xC3\x89", -			"\xC3\xAA" => "\xC3\x8A", "\xC3\xAB" => "\xC3\x8B", "\xC3\xAC" => "\xC3\x8C", "\xC3\xAD" => "\xC3\x8D", -			"\xC3\xAE" => "\xC3\x8E", "\xC3\xAF" => "\xC3\x8F", "\xC3\xB0" => "\xC3\x90", "\xC3\xB1" => "\xC3\x91", -			"\xC3\xB2" => "\xC3\x92", "\xC3\xB3" => "\xC3\x93", "\xC3\xB4" => "\xC3\x94", "\xC3\xB5" => "\xC3\x95", -			"\xC3\xB6" => "\xC3\x96", "\xC3\xB8" => "\xC3\x98", "\xC3\xB9" => "\xC3\x99", "\xC3\xBA" => "\xC3\x9A", -			"\xC3\xBB" => "\xC3\x9B", "\xC3\xBC" => "\xC3\x9C", "\xC3\xBD" => "\xC3\x9D", "\xC3\xBE" => "\xC3\x9E", -			"\xC3\xBF" => "\xC5\xB8", "\xC4\x81" => "\xC4\x80", "\xC4\x83" => "\xC4\x82", "\xC4\x85" => "\xC4\x84", -			"\xC4\x87" => "\xC4\x86", "\xC4\x89" => "\xC4\x88", "\xC4\x8B" => "\xC4\x8A", "\xC4\x8D" => "\xC4\x8C", -			"\xC4\x8F" => "\xC4\x8E", "\xC4\x91" => "\xC4\x90", "\xC4\x93" => "\xC4\x92", "\xC4\x97" => "\xC4\x96", -			"\xC4\x99" => "\xC4\x98", "\xC4\x9B" => "\xC4\x9A", "\xC4\x9D" => "\xC4\x9C", "\xC4\x9F" => "\xC4\x9E", -			"\xC4\xA1" => "\xC4\xA0", "\xC4\xA3" => "\xC4\xA2", "\xC4\xA5" => "\xC4\xA4", "\xC4\xA7" => "\xC4\xA6", -			"\xC4\xA9" => "\xC4\xA8", "\xC4\xAB" => "\xC4\xAA", "\xC4\xAF" => "\xC4\xAE", "\xC4\xB5" => "\xC4\xB4", -			"\xC4\xB7" => "\xC4\xB6", "\xC4\xBA" => "\xC4\xB9", "\xC4\xBC" => "\xC4\xBB", "\xC4\xBE" => "\xC4\xBD", -			"\xC5\x82" => "\xC5\x81", "\xC5\x84" => "\xC5\x83", "\xC5\x86" => "\xC5\x85", "\xC5\x88" => "\xC5\x87", -			"\xC5\x8B" => "\xC5\x8A", "\xC5\x8D" => "\xC5\x8C", "\xC5\x91" => "\xC5\x90", "\xC5\x95" => "\xC5\x94", -			"\xC5\x97" => "\xC5\x96", "\xC5\x99" => "\xC5\x98", "\xC5\x9B" => "\xC5\x9A", "\xC5\x9D" => "\xC5\x9C", -			"\xC5\x9F" => "\xC5\x9E", "\xC5\xA1" => "\xC5\xA0", "\xC5\xA3" => "\xC5\xA2", "\xC5\xA5" => "\xC5\xA4", -			"\xC5\xA7" => "\xC5\xA6", "\xC5\xA9" => "\xC5\xA8", "\xC5\xAB" => "\xC5\xAA", "\xC5\xAD" => "\xC5\xAC", -			"\xC5\xAF" => "\xC5\xAE", "\xC5\xB1" => "\xC5\xB0", "\xC5\xB3" => "\xC5\xB2", "\xC5\xB5" => "\xC5\xB4", -			"\xC5\xB7" => "\xC5\xB6", "\xC5\xBA" => "\xC5\xB9", "\xC5\xBC" => "\xC5\xBB", "\xC5\xBE" => "\xC5\xBD", -			"\xC6\xA1" => "\xC6\xA0", "\xC6\xB0" => "\xC6\xAF", "\xC8\x99" => "\xC8\x98", "\xC8\x9B" => "\xC8\x9A", -			"\xCE\xAC" => "\xCE\x86", "\xCE\xAD" => "\xCE\x88", "\xCE\xAE" => "\xCE\x89", "\xCE\xAF" => "\xCE\x8A", -			"\xCE\xB1" => "\xCE\x91", "\xCE\xB2" => "\xCE\x92", "\xCE\xB3" => "\xCE\x93", "\xCE\xB4" => "\xCE\x94", -			"\xCE\xB5" => "\xCE\x95", "\xCE\xB6" => "\xCE\x96", "\xCE\xB7" => "\xCE\x97", "\xCE\xB8" => "\xCE\x98", -			"\xCE\xB9" => "\xCE\x99", "\xCE\xBA" => "\xCE\x9A", "\xCE\xBB" => "\xCE\x9B", "\xCE\xBC" => "\xCE\x9C", -			"\xCE\xBD" => "\xCE\x9D", "\xCE\xBE" => "\xCE\x9E", "\xCE\xBF" => "\xCE\x9F", "\xCF\x80" => "\xCE\xA0", -			"\xCF\x81" => "\xCE\xA1", "\xCF\x83" => "\xCE\xA3", "\xCF\x84" => "\xCE\xA4", "\xCF\x85" => "\xCE\xA5", -			"\xCF\x86" => "\xCE\xA6", "\xCF\x87" => "\xCE\xA7", "\xCF\x88" => "\xCE\xA8", "\xCF\x89" => "\xCE\xA9", -			"\xCF\x8A" => "\xCE\xAA", "\xCF\x8B" => "\xCE\xAB", "\xCF\x8C" => "\xCE\x8C", "\xCF\x8D" => "\xCE\x8E", -			"\xCF\x8E" => "\xCE\x8F", "\xD0\xB0" => "\xD0\x90", "\xD0\xB1" => "\xD0\x91", "\xD0\xB2" => "\xD0\x92", -			"\xD0\xB3" => "\xD0\x93", "\xD0\xB4" => "\xD0\x94", "\xD0\xB5" => "\xD0\x95", "\xD0\xB6" => "\xD0\x96", -			"\xD0\xB7" => "\xD0\x97", "\xD0\xB8" => "\xD0\x98", "\xD0\xB9" => "\xD0\x99", "\xD0\xBA" => "\xD0\x9A", -			"\xD0\xBB" => "\xD0\x9B", "\xD0\xBC" => "\xD0\x9C", "\xD0\xBD" => "\xD0\x9D", "\xD0\xBE" => "\xD0\x9E", -			"\xD0\xBF" => "\xD0\x9F", "\xD1\x80" => "\xD0\xA0", "\xD1\x81" => "\xD0\xA1", "\xD1\x82" => "\xD0\xA2", -			"\xD1\x83" => "\xD0\xA3", "\xD1\x84" => "\xD0\xA4", "\xD1\x85" => "\xD0\xA5", "\xD1\x86" => "\xD0\xA6", -			"\xD1\x87" => "\xD0\xA7", "\xD1\x88" => "\xD0\xA8", "\xD1\x89" => "\xD0\xA9", "\xD1\x8A" => "\xD0\xAA", -			"\xD1\x8B" => "\xD0\xAB", "\xD1\x8C" => "\xD0\xAC", "\xD1\x8D" => "\xD0\xAD", "\xD1\x8E" => "\xD0\xAE", -			"\xD1\x8F" => "\xD0\xAF", "\xD1\x91" => "\xD0\x81", "\xD1\x92" => "\xD0\x82", "\xD1\x93" => "\xD0\x83", -			"\xD1\x94" => "\xD0\x84", "\xD1\x95" => "\xD0\x85", "\xD1\x96" => "\xD0\x86", "\xD1\x97" => "\xD0\x87", -			"\xD1\x98" => "\xD0\x88", "\xD1\x99" => "\xD0\x89", "\xD1\x9A" => "\xD0\x8A", "\xD1\x9B" => "\xD0\x8B", -			"\xD1\x9C" => "\xD0\x8C", "\xD1\x9E" => "\xD0\x8E", "\xD1\x9F" => "\xD0\x8F", "\xD2\x91" => "\xD2\x90", -			"\xE1\xB8\x83" => "\xE1\xB8\x82", "\xE1\xB8\x8B" => "\xE1\xB8\x8A", "\xE1\xB8\x9F" => "\xE1\xB8\x9E", "\xE1\xB9\x81" => "\xE1\xB9\x80", -			"\xE1\xB9\x97" => "\xE1\xB9\x96", "\xE1\xB9\xA1" => "\xE1\xB9\xA0", "\xE1\xB9\xAB" => "\xE1\xB9\xAA", "\xE1\xBA\x81" => "\xE1\xBA\x80", -			"\xE1\xBA\x83" => "\xE1\xBA\x82", "\xE1\xBA\x85" => "\xE1\xBA\x84", "\xE1\xBB\xB3" => "\xE1\xBB\xB2" -		); - -		return strtr(strtoupper($string), $utf8_lower_to_upper); -	} - -	/**  	* UTF-8 aware alternative to substr  	* Return part of a string given character offset (and optionally length)  	* @@ -661,33 +513,6 @@ function utf8_strspn($str, $mask, $start = null, $length = null)  }  /** -* UTF-8 aware alternative to ucfirst -* Make a string's first character uppercase -* -* @author Harry Fuecks -* @param string -* @return string with first character as upper case (if applicable) -*/ -function utf8_ucfirst($str) -{ -	switch (utf8_strlen($str)) -	{ -		case 0: -			return ''; -		break; - -		case 1: -			return utf8_strtoupper($str); -		break; - -		default: -			preg_match('/^(.{1})(.*)$/us', $str, $matches); -			return utf8_strtoupper($matches[1]) . $matches[2]; -		break; -	} -} - -/**  * Replace all UTF-8 chars that are not in ASCII with their NCR  *  * @param	string	$text		UTF-8 string in NFC  | 
