diff --git a/class2.php b/class2.php index dae41104c..3034da42a 100755 --- a/class2.php +++ b/class2.php @@ -84,14 +84,14 @@ if(function_exists('ini_get')) if($register_globals == true) { if(isset($_REQUEST['_E107'])) { unset($_E107); } - while (list($global) = each($GLOBALS)) + foreach($GLOBALS as $global=>$var) { if (!preg_match('/^(_POST|_GET|_COOKIE|_SERVER|_FILES|_SESSION|GLOBALS|HTTP.*|_REQUEST|_E107|retrieve_prefs|eplug_admin|eTimingStart.*|oblev_.*)$/', $global)) { unset($$global); } } - unset($global); + unset($global, $var); } // MOVED TO $e107->prepare_request() @@ -285,7 +285,7 @@ if(isset($mySQLport)) } $e107 = e107::getInstance()->initCore($e107_paths, e_ROOT, $sql_info, varset($E107_CONFIG, array())); e107::getSingleton('eIPHandler'); // This auto-handles bans etc -unset($dirPaths,$sql_info,$e107_paths); +unset($dirPaths,$e107_paths); /** * NEW - system security levels @@ -401,8 +401,8 @@ $sql = e107::getDb(); //TODO - find & replace $sql, $e107->sql $sql->db_SetErrorReporting(false); $dbg->logTime('SQL Connect'); -$merror=$sql->db_Connect($mySQLserver, $mySQLuser, $mySQLpassword, $mySQLdefaultdb); - +$merror=$sql->db_Connect($sql_info['mySQLserver'], $sql_info['mySQLuser'], $sql_info['mySQLpassword'], $mySQLdefaultdb); +unset($sql_info); // create after the initial connection. //DEPRECATED, BC, call the method only when needed $sql2 = e107::getDb('sql2'); //TODO find & replace all $sql2 calls @@ -675,7 +675,7 @@ if(isset($pref['lan_global_list'])) { if(e107::plugLan($path, 'global', true) === false) { - e107::plugLan($path, 'global', false); + e107::plugLan($path, 'global'); } } @@ -703,7 +703,7 @@ $dbg->logTime('Misc resources. Online user tracking, cache'); $e107cache = e107::getCache(); //TODO - find & replace $e107cache, $e107->ecache //DEPRECATED, BC, call the method only when needed, $e107->override caught by __get() -$override = e107::getSingleton('override', true); +$override = e107::getSingleton('override'); //DEPRECATED, BC, call the method only when needed, $e107->user_class caught by __get() $e_userclass = e107::getUserClass(); //TODO - find & replace $e_userclass, $e107->user_class @@ -753,7 +753,7 @@ define('SITECONTACTINFO', $tp->toHTML($pref['sitecontactinfo'], true, 'emotes_of define('SITEEMAIL', vartrue($pref['replyto_email'],$pref['siteadminemail'])); define('USER_REGISTRATION', vartrue($pref['user_reg'],false)); // User Registration System Active or Not. define('e_DEVELOPER', $developerMode); -define('e_VERSION', varset($pref['version'],'')); +define('e_VERSION', varset($pref['version'])); unset($developerMode); @@ -1334,7 +1334,7 @@ $dbg->logTime('Login/logout/ban/tz'); if (isset($_POST['userlogin']) || isset($_POST['userlogin_x'])) { - e107::getUser()->login($_POST['username'], $_POST['userpass'], $_POST['autologin'], varset($_POST['hashchallenge'],''), false); + e107::getUser()->login($_POST['username'], $_POST['userpass'], $_POST['autologin'], varset($_POST['hashchallenge']), false); // e107_require_once(e_HANDLER.'login.php'); // $usr = new userlogin($_POST['username'], $_POST['userpass'], $_POST['autologin'], varset($_POST['hashchallenge'],'')); } @@ -1347,7 +1347,7 @@ if (($_SERVER['QUERY_STRING'] == 'logout')/* || (($pref['user_tracking'] == 'ses { if (USER) { - if (check_class(varset($pref['user_audit_class'],''))) // Need to note in user audit trail + if (check_class(varset($pref['user_audit_class']))) // Need to note in user audit trail { e107::getLog()->user_audit(USER_AUDIT_LOGOUT, null, USERID, USERNAME); } @@ -1531,7 +1531,7 @@ if(!defined("THEME_LAYOUT")) $user_pref = e107::getUser()->getPref(); $pref = e107::getPref(); $cusPagePref = (!empty($user_pref['sitetheme_custompages'])) ? $user_pref['sitetheme_custompages'] : varset($pref['sitetheme_custompages'],array()); - $cusPageDef = (empty($user_pref['sitetheme_deflayout'])) ? varset($pref['sitetheme_deflayout'],'') : $user_pref['sitetheme_deflayout']; + $cusPageDef = (empty($user_pref['sitetheme_deflayout'])) ? varset($pref['sitetheme_deflayout']) : $user_pref['sitetheme_deflayout']; $deflayout = e107::getTheme()->getThemeLayout($cusPagePref, $cusPageDef, e_REQUEST_URL, varset($_SERVER['SCRIPT_FILENAME'])); define("THEME_LAYOUT",$deflayout); @@ -1882,7 +1882,7 @@ function get_user_data($uid, $extra = '') unset($extra); $var = array(); - $user = e107::getSystemUser($uid, true); + $user = e107::getSystemUser($uid); if($user) { $var = $user->getUserData(); @@ -2077,7 +2077,7 @@ function init_session() e107::getDebug()->log("Timezone: ".USERTIMEZONE); // remove later on. - define('USERIP', e107::getIPHandler()->getIP(FALSE)); + define('USERIP', e107::getIPHandler()->getIP()); define('POST_REFERER', md5($user->getToken())); // Check for intruders - outside the model for now @@ -2733,7 +2733,7 @@ class e_http_header function __construct() { - if (strstr(varset($_SERVER['HTTP_ACCEPT_ENCODING'], ''), 'gzip')) + if (strstr(varset($_SERVER['HTTP_ACCEPT_ENCODING']), 'gzip')) { $this->compression_browser_support = true; } diff --git a/e107_admin/phpinfo.php b/e107_admin/phpinfo.php index 7ac521f76..4edc471d7 100644 --- a/e107_admin/phpinfo.php +++ b/e107_admin/phpinfo.php @@ -55,7 +55,7 @@ foreach($extensionCheck as $var) { $erTitle = deftrue('PHP_LAN_7', "PHP Configuration Issue(s) Found:"); $def = deftrue('PHP_LAN_8', "[x] is missing from the PHP configuration and need to be installed."); - $message = $tp->lanVars($def,$var['label'],true); + $message = e107::getParser()->lanVars($def,$var['label'],true); $mes->setIcon('fa-hand-stop-o', E_MESSAGE_ERROR)->setTitle($erTitle,E_MESSAGE_ERROR)->addError($message." ".ADMIN_INFO_ICON." "); @@ -78,7 +78,7 @@ $security_risks = array( if(ini_get($risk)) { $srch = ''.$risk.''; - $repl = ''.$risk.''; + $repl = ''.$risk.''; $phpinfo = str_replace($srch,$repl,$phpinfo); $mes->addWarning("".$risk.": ".$diz); } @@ -105,6 +105,6 @@ if(deftrue('e_DEBUG')) $mes->addDebug("Session ID: ".session_id()); } -$ns->tablerender("PHPInfo", $mes->render(). $phpinfo); +e107::getRender()->tablerender("PHPInfo", $mes->render(). $phpinfo); require_once("footer.php"); diff --git a/e107_handlers/e_parse_class.php b/e107_handlers/e_parse_class.php index 9b6c6fb01..0d2a5cbb7 100644 --- a/e107_handlers/e_parse_class.php +++ b/e107_handlers/e_parse_class.php @@ -33,26 +33,26 @@ class e_parse extends e_parser //var $e_sc; // BBCode processor - var $e_bb; + protected $e_bb; // Profanity filter - var $e_pf; + protected $e_pf; // Emote filter - var $e_emote; + protected $e_emote; // 'Hooked' parsers (array) - var $e_hook; + protected $e_hook; - var $search = array('&#039;', ''', ''', '"', 'onerror', '>', '&quot;', ' & '); + protected $search = array('&#039;', ''', ''', '"', 'onerror', '>', '&quot;', ' & '); - var $replace = array("'", "'", "'", '"', 'onerror', '>', '"', ' & '); + protected $replace = array("'", "'", "'", '"', 'onerror', '>', '"', ' & '); // Set to TRUE or FALSE once it has been calculated - var $e_highlighting; + protected $e_highlighting; // Highlight query - var $e_query; + protected $e_query; public $thumbWidth = 100; @@ -72,7 +72,7 @@ class e_parse extends e_parser // Set up the defaults - var $e_optDefault = array( + protected $e_optDefault = array( // default context: reflects legacy settings (many items enabled) 'context' => 'OLDDEFAULT', // @@ -116,7 +116,7 @@ class e_parse extends e_parser ); // Super modifiers override default option values - var $e_SuperMods = array( + protected $e_SuperMods = array( //text is part of a title (e.g. news title) 'TITLE' => array( @@ -184,7 +184,7 @@ class e_parse extends e_parser ); // Individual modifiers change the current context - var $e_Modifiers = array( + protected $e_Modifiers = array( 'emotes_off' => array('emotes' => FALSE), 'emotes_on' => array('emotes' => TRUE), 'no_hook' => array('hook' => FALSE), @@ -267,7 +267,7 @@ class e_parse extends e_parser /** * Initialise the type of UTF-8 processing methods depending on PHP version and mb string extension. - * + * Note: mb string is required during installation of e107. * NOTE: can't be called until CHARSET is known but we all know that it is UTF-8 now * @@ -278,36 +278,20 @@ class e_parse extends e_parser // Start by working out what, if anything, we do about utf-8 handling. // 'Do nothing' is the simple option $this->utfAction = 0; -// CHARSET is utf-8 -// if(strtolower(CHARSET) == 'utf-8') -// { - if(PHP_MAJOR_VERSION < 6) + if(PHP_MAJOR_VERSION < 6 && extension_loaded('mbstring')) + { + // Check for function overloading + $temp = ini_get('mbstring.func_overload'); + // Just check the string functions - will be non-zero if overloaded + if(defined('MB_OVERLOAD_STRING') && ($temp & MB_OVERLOAD_STRING) == 0) { - // Need to do something here - if(extension_loaded('mbstring') && defined('MB_OVERLOAD_STRING')) - { - // Check for function overloading - $temp = ini_get('mbstring.func_overload'); - // Just check the string functions - will be non-zero if overloaded - if(($temp & MB_OVERLOAD_STRING) == 0) - { - // Can use the mb_string routines - $this->utfAction = 1; - } - // Set the default encoding, so we don't have to specify every time - mb_internal_encoding('UTF-8'); - } - else - { - // Must use emulation - will probably be slow! - $this->utfAction = 2; - require_once(E_UTF8_PACK.'utils/unicode.php'); - // Always load the core routines - bound to need some of them! - require_once(E_UTF8_PACK.'native/core.php'); - } + // Can use the mb_string routines + $this->utfAction = 1; } -// } + // Set the default encoding, so we don't have to specify every time + mb_internal_encoding('UTF-8'); + } } @@ -344,13 +328,14 @@ class e_parse extends e_parser { switch($this->utfAction) { - case 0: - return strtolower($str); + case 1: return mb_strtolower($str); + case 0: + default: + return strtolower($str); } - // Default case shouldn't happen often - return utf8_strtolower($str); + } @@ -365,13 +350,13 @@ class e_parse extends e_parser { switch($this->utfAction) { - case 0: - return strtoupper($str); + case 1: return mb_strtoupper($str); + default: + return strtoupper($str); } - // Default case shouldn't happen often - return utf8_strtoupper($str); + } @@ -391,12 +376,13 @@ class e_parse extends e_parser { switch($this->utfAction) { - case 0: - return strpos($haystack, $needle, $offset); + case 1: return mb_strpos($haystack, $needle, $offset); + default: + return strpos($haystack, $needle, $offset); } - return utf8_strpos($haystack, $needle, $offset); + } @@ -416,12 +402,13 @@ class e_parse extends e_parser { switch($this->utfAction) { - case 0: - return strrpos($haystack, $needle, $offset); + case 1: return mb_strrpos($haystack, $needle, $offset); + default: + return strrpos($haystack, $needle, $offset); } - return utf8_strrpos($haystack, $needle, $offset); + } @@ -431,7 +418,7 @@ class e_parse extends e_parser * * @param string $haystack The UTF-8 encoded string to search in. * @param mixed $needle If needle is not a string, it is converted to an integer and applied as the ordinal value of a character. - * @param integer $length [optional] (PHP 5.3+) If TRUE, returns the part of the haystack before the first occurrence of the needle (excluding needle). + * @param integer $before_needle [optional] (PHP 5.3+) If TRUE, returns the part of the haystack before the first occurrence of the needle (excluding needle). * @return string Returns the matched substring. If needle is not found, returns FALSE. */ public function ustristr($haystack, $needle, $before_needle = false) @@ -466,8 +453,7 @@ class e_parse extends e_parser { switch($this->utfAction) { - case 0: - return substr($str, $start, $length); + case 1: if(is_null($length)) { @@ -477,8 +463,11 @@ class e_parse extends e_parser { return mb_substr($str, $start, $length); } + + default: + return substr($str, $start, $length); } - return utf8_substr($str, $start, $length); + } /** @@ -541,7 +530,7 @@ class e_parse extends e_parser $data = str_replace(array('%7B','%7D'),array('{','}'),$data); // fix for {e_XXX} paths. } - else // caused double-encoding of '&' + // else // caused double-encoding of '&' { // $data = str_replace('&','&',$data); // $data = str_replace('<','<',$data); @@ -658,7 +647,7 @@ class e_parse extends e_parser $checkTags = explode(',', $tagList); } $tagArray = array_flip($checkTags); - foreach ($tagArray as &$v) { $v = 0; }; // Data fields become zero; keys are tag names. + foreach ($tagArray as &$v) { $v = 0; } // Data fields become zero; keys are tag names. $data = strtolower(preg_replace('#\[code\].*?\[\/code\]#i', '', $data)); // Ignore code blocks. All lower case simplifies the rest $matches = array(); if (!preg_match_all('#<(\/|)([^<>]*?[^\/])>#', $data, $matches, PREG_SET_ORDER)) @@ -770,7 +759,7 @@ class e_parse extends e_parser // XXX REmove ME. private function modTag($match) { - $ans = ''; + if (isset($match[1])) { $chop = intval(strlen($match[1]) / 2); @@ -887,10 +876,12 @@ class e_parse extends e_parser return e107::getScParser()->parseCodes($text, $parseSCFiles, $extraCodes, $eVars); } - + /** - * Check if we are using the simple-Parse array format, or a legacy .sc format which contains 'return ' + * Check if we are using the simple-Parse array format, or a legacy .sc format which contains 'return ' + * * @param array $extraCodes + * @return bool */ private function isSimpleParse($extraCodes) { @@ -975,7 +966,7 @@ class e_parse extends e_parser $nobreak = explode(" ", strtolower($nobreak)); // Variable setup - $intag = FALSE; + $innbk = array(); $drain = ""; @@ -1423,7 +1414,7 @@ class e_parse extends e_parser $this->e_highlighting = TRUE; if(!isset($this->e_query)) { - $query = preg_match('#(q|p)=(.*?)(&|$)#', $shr, $matches); + preg_match('#(q|p)=(.*?)(&|$)#', $shr, $matches); $this->e_query = str_replace(array('+', '*', '"', ' '), array('', '.*?', '', '\b|\b'), trim(urldecode($matches[2]))); } } @@ -2191,8 +2182,8 @@ class e_parse extends e_parser 'ά' => 'a', 'έ' => 'e', 'ί' => 'i', 'ό' => 'o', 'ύ' => 'y', 'ή' => 'h', 'ώ' => 'w', 'ς' => 's', 'ϊ' => 'i', 'ΰ' => 'y', 'ϋ' => 'y', 'ΐ' => 'i', // Turkish - 'Ş' => 'S', 'İ' => 'I', 'Ç' => 'C', 'Ü' => 'U', 'Ö' => 'O', 'Ğ' => 'G', - 'ş' => 's', 'ı' => 'i', 'ç' => 'c', 'ü' => 'u', 'ö' => 'o', 'ğ' => 'g', + 'Ş' => 'S', 'İ' => 'I', /*'Ç' => 'C', 'Ü' => 'U', 'Ö' => 'O',*/ 'Ğ' => 'G', + 'ş' => 's', 'ı' => 'i', /*'ç' => 'c', 'ü' => 'u', 'ö' => 'o',*/ 'ğ' => 'g', // Russian 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'Yo', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I', 'Й' => 'J', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', @@ -2213,15 +2204,15 @@ class e_parse extends e_parser 'č' => 'c', 'ď' => 'd', 'ě' => 'e', 'ň' => 'n', 'ř' => 'r', 'š' => 's', 'ť' => 't', 'ů' => 'u', 'ž' => 'z', // Polish - 'Ą' => 'A', 'Ć' => 'C', 'Ę' => 'e', 'Ł' => 'L', 'Ń' => 'N', 'Ó' => 'o', 'Ś' => 'S', 'Ź' => 'Z', + 'Ą' => 'A', 'Ć' => 'C', 'Ę' => 'e', 'Ł' => 'L', 'Ń' => 'N', /*'Ó' => 'o',*/ 'Ś' => 'S', 'Ź' => 'Z', 'Ż' => 'Z', - 'ą' => 'a', 'ć' => 'c', 'ę' => 'e', 'ł' => 'l', 'ń' => 'n', 'ó' => 'o', 'ś' => 's', 'ź' => 'z', + 'ą' => 'a', 'ć' => 'c', 'ę' => 'e', 'ł' => 'l', 'ń' => 'n',/* 'ó' => 'o',*/ 'ś' => 's', 'ź' => 'z', 'ż' => 'z', // Latvian - 'Ā' => 'A', 'Č' => 'C', 'Ē' => 'E', 'Ģ' => 'G', 'Ī' => 'i', 'Ķ' => 'k', 'Ļ' => 'L', 'Ņ' => 'N', - 'Š' => 'S', 'Ū' => 'u', 'Ž' => 'Z', - 'ā' => 'a', 'č' => 'c', 'ē' => 'e', 'ģ' => 'g', 'ī' => 'i', 'ķ' => 'k', 'ļ' => 'l', 'ņ' => 'n', - 'š' => 's', 'ū' => 'u', 'ž' => 'z', + 'Ā' => 'A',/* 'Č' => 'C',*/ 'Ē' => 'E', 'Ģ' => 'G', 'Ī' => 'i', 'Ķ' => 'k', 'Ļ' => 'L', 'Ņ' => 'N', + /*'Š' => 'S',*/ 'Ū' => 'u', + 'ā' => 'a', 'ē' => 'e', 'ģ' => 'g', 'ī' => 'i', 'ķ' => 'k', 'ļ' => 'l', 'ņ' => 'n', + 'ū' => 'u', 'ľ' => 'l', 'ŕ'=>'r', ); @@ -4889,7 +4880,7 @@ class e_parser { $ext = pathinfo($file,PATHINFO_EXTENSION); - return ($ext === 'youtube' || $ext === 'youtubepl') ? true : false; + return $ext === 'youtube' || $ext === 'youtubepl'; } @@ -4908,7 +4899,7 @@ class e_parser $ext = pathinfo($file,PATHINFO_EXTENSION); - return ($ext === 'jpg' || $ext === 'png' || $ext === 'gif' || $ext === 'jpeg') ? true : false; + return $ext === 'jpg' || $ext === 'png' || $ext === 'gif' || $ext === 'jpeg'; } @@ -5220,7 +5211,7 @@ TMPL; print_a( $filter3); // Filter by String. - $filter1 = $tp->filter($text,'str'); + $filter1 = $tp->filter($text); echo "

User-input ≫ filter(\$text, 'str')

"; print_a($filter1); @@ -5355,7 +5346,7 @@ return; echo "

New Parser

"; echo "

Processed

"; - $cleaned = $this->cleanHtml($html, true); // false = don't check html pref. + $cleaned = $this->cleanHtml($html); // false = don't check html pref. print_a($cleaned); $dbg->logTime('new Parser'); // $dbg->logTime('------ End Parser Test -------'); @@ -5998,7 +5989,7 @@ class e_emotefilter class e_profanityFilter { - var $profanityList; + protected $profanityList; function __construct() { @@ -6101,6 +6092,8 @@ class textparse { e107::getDebug()->logDeprecated(); } + unset($mode); // keep PHPStorm happy + return e107::getParser()->toDB($text); } diff --git a/e107_handlers/e_thumbnail_class.php b/e107_handlers/e_thumbnail_class.php index 5888069dd..d761ae499 100644 --- a/e107_handlers/e_thumbnail_class.php +++ b/e107_handlers/e_thumbnail_class.php @@ -169,7 +169,7 @@ class e_thumbnail $tp = e107::getParser(); // convert raw to SC path - $this->_request['src'] = str_replace($tp->getUrlConstants('raw'), $tp->getUrlConstants('sc'), $this->_request['src']); + $this->_request['src'] = str_replace($tp->getUrlConstants('raw'), $tp->getUrlConstants(), $this->_request['src']); // convert absolute and full url to SC URL $this->_src = $tp->createConstants($this->_request['src'], 'mix'); @@ -228,7 +228,7 @@ class e_thumbnail $fname = e107::getParser()->thumbCacheFile($this->_src_path, $options); $cache_filename = e_CACHE_IMAGE . $fname; - // $this->sendCachedImage($cache_filename, $thumbnfo); + $this->sendCachedImage($cache_filename, $thumbnfo); // No Cached file found - proceed with image creation. diff --git a/e107_handlers/utf8/native/core.php b/e107_handlers/utf8/native/core.php deleted file mode 100644 index bea76d992..000000000 --- a/e107_handlers/utf8/native/core.php +++ /dev/null @@ -1,438 +0,0 @@ - -* @link http://www.php.net/manual/en/function.strlen.php -* @link http://www.php.net/manual/en/function.utf8-decode.php -* @param string UTF-8 string -* @return int number of UTF-8 characters in string -* @package utf8 -* @subpackage strings -*/ -function utf8_strlen($str){ - return strlen(utf8_decode($str)); -} - - -//-------------------------------------------------------------------- -/** -* UTF-8 aware alternative to strpos -* Find position of first occurrence of a string -* Note: This will get alot slower if offset is used -* Note: requires utf8_strlen amd utf8_substr to be loaded -* @param string haystack -* @param string needle (you should validate this with utf8_is_valid) -* @param integer offset in characters (from left) -* @return mixed integer position or FALSE on failure -* @see http://www.php.net/strpos -* @see utf8_strlen -* @see utf8_substr -* @package utf8 -* @subpackage strings -*/ -function utf8_strpos($str, $needle, $offset = NULL) { - - if ( is_null($offset) ) { - - $ar = explode($needle, $str, 2); - if ( count($ar) > 1 ) { - return utf8_strlen($ar[0]); - } - return FALSE; - - } else { - - if ( !is_int($offset) ) { - trigger_error('utf8_strpos: Offset must be an integer',E_USER_ERROR); - return FALSE; - } - - $str = utf8_substr($str, $offset); - - if ( FALSE !== ( $pos = utf8_strpos($str, $needle) ) ) { - return $pos + $offset; - } - - return FALSE; - } - -} - -//-------------------------------------------------------------------- -/** -* UTF-8 aware alternative to strrpos -* Find position of last occurrence of a char in a string -* Note: This will get alot slower if offset is used -* Note: requires utf8_substr and utf8_strlen to be loaded -* @param string haystack -* @param string needle (you should validate this with utf8_is_valid) -* @param integer (optional) offset (from left) -* @return mixed integer position or FALSE on failure -* @see http://www.php.net/strrpos -* @see utf8_substr -* @see utf8_strlen -* @package utf8 -* @subpackage strings -*/ -function utf8_strrpos($str, $needle, $offset = NULL) { - - if ( is_null($offset) ) { - - $ar = explode($needle, $str); - - if ( count($ar) > 1 ) { - // Pop off the end of the string where the last match was made - array_pop($ar); - $str = join($needle,$ar); - return utf8_strlen($str); - } - return FALSE; - - } else { - - if ( !is_int($offset) ) { - trigger_error('utf8_strrpos expects parameter 3 to be long',E_USER_WARNING); - return FALSE; - } - - $str = utf8_substr($str, $offset); - - if ( FALSE !== ( $pos = utf8_strrpos($str, $needle) ) ) { - return $pos + $offset; - } - - return FALSE; - } - -} - -//-------------------------------------------------------------------- -/** -* UTF-8 aware alternative to substr -* Return part of a string given character offset (and optionally length) -* -* Note arguments: comparied to substr - if offset or length are -* not integers, this version will not complain but rather massages them -* into an integer. -* -* Note on returned values: substr documentation states false can be -* returned in some cases (e.g. offset > string length) -* mb_substr never returns false, it will return an empty string instead. -* This adopts the mb_substr approach -* -* Note on implementation: PCRE only supports repetitions of less than -* 65536, in order to accept up to MAXINT values for offset and length, -* we'll repeat a group of 65535 characters when needed. -* -* Note on implementation: calculating the number of characters in the -* string is a relatively expensive operation, so we only carry it out when -* necessary. It isn't necessary for +ve offsets and no specified length -* -* @author Chris Smith -* @param string -* @param integer number of UTF-8 characters offset (from left) -* @param integer (optional) length in UTF-8 characters from offset -* @return mixed string or FALSE if failure -* @package utf8 -* @subpackage strings -*/ -function utf8_substr($str, $offset, $length = NULL) { - - // generates E_NOTICE - // for PHP4 objects, but not PHP5 objects - $str = (string)$str; - $offset = (int)$offset; - if (!is_null($length)) $length = (int)$length; - - // handle trivial cases - if ($length === 0) return ''; - if ($offset < 0 && $length < 0 && $length < $offset) - return ''; - - // normalise negative offsets (we could use a tail - // anchored pattern, but they are horribly slow!) - if ($offset < 0) { - - // see notes - $strlen = strlen(utf8_decode($str)); - $offset = $strlen + $offset; - if ($offset < 0) $offset = 0; - - } - - $Op = ''; - $Lp = ''; - - // establish a pattern for offset, a - // non-captured group equal in length to offset - if ($offset > 0) { - - $Ox = (int)($offset/65535); - $Oy = $offset%65535; - - if ($Ox) { - $Op = '(?:.{65535}){'.$Ox.'}'; - } - - $Op = '^(?:'.$Op.'.{'.$Oy.'})'; - - } else { - - // offset == 0; just anchor the pattern - $Op = '^'; - - } - - // establish a pattern for length - if (is_null($length)) { - - // the rest of the string - $Lp = '(.*)$'; - - } else { - - if (!isset($strlen)) { - // see notes - $strlen = strlen(utf8_decode($str)); - } - - // another trivial case - if ($offset > $strlen) return ''; - - if ($length > 0) { - - // reduce any length that would - // go passed the end of the string - $length = min($strlen-$offset, $length); - - $Lx = (int)( $length / 65535 ); - $Ly = $length % 65535; - - // negative length requires a captured group - // of length characters - if ($Lx) $Lp = '(?:.{65535}){'.$Lx.'}'; - $Lp = '('.$Lp.'.{'.$Ly.'})'; - - } else if ($length < 0) { - - if ( $length < ($offset - $strlen) ) { - return ''; - } - - $Lx = (int)((-$length)/65535); - $Ly = (-$length)%65535; - - // negative length requires ... capture everything - // except a group of -length characters - // anchored at the tail-end of the string - if ($Lx) $Lp = '(?:.{65535}){'.$Lx.'}'; - $Lp = '(.*)(?:'.$Lp.'.{'.$Ly.'})$'; - - } - - } - - if (!preg_match( '#'.$Op.$Lp.'#us',$str, $match )) { - return ''; - } - - return $match[1]; - -} - -//--------------------------------------------------------------- -/** -* 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 -* Note: requires utf8_to_unicode and utf8_from_unicode -* @author Andreas Gohr -* @param string -* @return mixed either string in lowercase or FALSE is UTF-8 invalid -* @see http://www.php.net/strtolower -* @see utf8_to_unicode -* @see utf8_from_unicode -* @see http://www.unicode.org/reports/tr21/tr21-5.html -* @see http://dev.splitbrain.org/view/darcs/dokuwiki/inc/utf8.php -* @package utf8 -* @subpackage strings -*/ -function utf8_strtolower($string){ - - static $UTF8_UPPER_TO_LOWER = NULL; - - if ( is_null($UTF8_UPPER_TO_LOWER) ) { - $UTF8_UPPER_TO_LOWER = array( - 0x0041=>0x0061, 0x03A6=>0x03C6, 0x0162=>0x0163, 0x00C5=>0x00E5, 0x0042=>0x0062, - 0x0139=>0x013A, 0x00C1=>0x00E1, 0x0141=>0x0142, 0x038E=>0x03CD, 0x0100=>0x0101, - 0x0490=>0x0491, 0x0394=>0x03B4, 0x015A=>0x015B, 0x0044=>0x0064, 0x0393=>0x03B3, - 0x00D4=>0x00F4, 0x042A=>0x044A, 0x0419=>0x0439, 0x0112=>0x0113, 0x041C=>0x043C, - 0x015E=>0x015F, 0x0143=>0x0144, 0x00CE=>0x00EE, 0x040E=>0x045E, 0x042F=>0x044F, - 0x039A=>0x03BA, 0x0154=>0x0155, 0x0049=>0x0069, 0x0053=>0x0073, 0x1E1E=>0x1E1F, - 0x0134=>0x0135, 0x0427=>0x0447, 0x03A0=>0x03C0, 0x0418=>0x0438, 0x00D3=>0x00F3, - 0x0420=>0x0440, 0x0404=>0x0454, 0x0415=>0x0435, 0x0429=>0x0449, 0x014A=>0x014B, - 0x0411=>0x0431, 0x0409=>0x0459, 0x1E02=>0x1E03, 0x00D6=>0x00F6, 0x00D9=>0x00F9, - 0x004E=>0x006E, 0x0401=>0x0451, 0x03A4=>0x03C4, 0x0423=>0x0443, 0x015C=>0x015D, - 0x0403=>0x0453, 0x03A8=>0x03C8, 0x0158=>0x0159, 0x0047=>0x0067, 0x00C4=>0x00E4, - 0x0386=>0x03AC, 0x0389=>0x03AE, 0x0166=>0x0167, 0x039E=>0x03BE, 0x0164=>0x0165, - 0x0116=>0x0117, 0x0108=>0x0109, 0x0056=>0x0076, 0x00DE=>0x00FE, 0x0156=>0x0157, - 0x00DA=>0x00FA, 0x1E60=>0x1E61, 0x1E82=>0x1E83, 0x00C2=>0x00E2, 0x0118=>0x0119, - 0x0145=>0x0146, 0x0050=>0x0070, 0x0150=>0x0151, 0x042E=>0x044E, 0x0128=>0x0129, - 0x03A7=>0x03C7, 0x013D=>0x013E, 0x0422=>0x0442, 0x005A=>0x007A, 0x0428=>0x0448, - 0x03A1=>0x03C1, 0x1E80=>0x1E81, 0x016C=>0x016D, 0x00D5=>0x00F5, 0x0055=>0x0075, - 0x0176=>0x0177, 0x00DC=>0x00FC, 0x1E56=>0x1E57, 0x03A3=>0x03C3, 0x041A=>0x043A, - 0x004D=>0x006D, 0x016A=>0x016B, 0x0170=>0x0171, 0x0424=>0x0444, 0x00CC=>0x00EC, - 0x0168=>0x0169, 0x039F=>0x03BF, 0x004B=>0x006B, 0x00D2=>0x00F2, 0x00C0=>0x00E0, - 0x0414=>0x0434, 0x03A9=>0x03C9, 0x1E6A=>0x1E6B, 0x00C3=>0x00E3, 0x042D=>0x044D, - 0x0416=>0x0436, 0x01A0=>0x01A1, 0x010C=>0x010D, 0x011C=>0x011D, 0x00D0=>0x00F0, - 0x013B=>0x013C, 0x040F=>0x045F, 0x040A=>0x045A, 0x00C8=>0x00E8, 0x03A5=>0x03C5, - 0x0046=>0x0066, 0x00DD=>0x00FD, 0x0043=>0x0063, 0x021A=>0x021B, 0x00CA=>0x00EA, - 0x0399=>0x03B9, 0x0179=>0x017A, 0x00CF=>0x00EF, 0x01AF=>0x01B0, 0x0045=>0x0065, - 0x039B=>0x03BB, 0x0398=>0x03B8, 0x039C=>0x03BC, 0x040C=>0x045C, 0x041F=>0x043F, - 0x042C=>0x044C, 0x00DE=>0x00FE, 0x00D0=>0x00F0, 0x1EF2=>0x1EF3, 0x0048=>0x0068, - 0x00CB=>0x00EB, 0x0110=>0x0111, 0x0413=>0x0433, 0x012E=>0x012F, 0x00C6=>0x00E6, - 0x0058=>0x0078, 0x0160=>0x0161, 0x016E=>0x016F, 0x0391=>0x03B1, 0x0407=>0x0457, - 0x0172=>0x0173, 0x0178=>0x00FF, 0x004F=>0x006F, 0x041B=>0x043B, 0x0395=>0x03B5, - 0x0425=>0x0445, 0x0120=>0x0121, 0x017D=>0x017E, 0x017B=>0x017C, 0x0396=>0x03B6, - 0x0392=>0x03B2, 0x0388=>0x03AD, 0x1E84=>0x1E85, 0x0174=>0x0175, 0x0051=>0x0071, - 0x0417=>0x0437, 0x1E0A=>0x1E0B, 0x0147=>0x0148, 0x0104=>0x0105, 0x0408=>0x0458, - 0x014C=>0x014D, 0x00CD=>0x00ED, 0x0059=>0x0079, 0x010A=>0x010B, 0x038F=>0x03CE, - 0x0052=>0x0072, 0x0410=>0x0430, 0x0405=>0x0455, 0x0402=>0x0452, 0x0126=>0x0127, - 0x0136=>0x0137, 0x012A=>0x012B, 0x038A=>0x03AF, 0x042B=>0x044B, 0x004C=>0x006C, - 0x0397=>0x03B7, 0x0124=>0x0125, 0x0218=>0x0219, 0x00DB=>0x00FB, 0x011E=>0x011F, - 0x041E=>0x043E, 0x1E40=>0x1E41, 0x039D=>0x03BD, 0x0106=>0x0107, 0x03AB=>0x03CB, - 0x0426=>0x0446, 0x00DE=>0x00FE, 0x00C7=>0x00E7, 0x03AA=>0x03CA, 0x0421=>0x0441, - 0x0412=>0x0432, 0x010E=>0x010F, 0x00D8=>0x00F8, 0x0057=>0x0077, 0x011A=>0x011B, - 0x0054=>0x0074, 0x004A=>0x006A, 0x040B=>0x045B, 0x0406=>0x0456, 0x0102=>0x0103, - 0x039B=>0x03BB, 0x00D1=>0x00F1, 0x041D=>0x043D, 0x038C=>0x03CC, 0x00C9=>0x00E9, - 0x00D0=>0x00F0, 0x0407=>0x0457, 0x0122=>0x0123, - ); - } - - $uni = utf8_to_unicode($string); - - if ( !$uni ) { - return FALSE; - } - - $cnt = count($uni); - for ($i=0; $i < $cnt; $i++){ - if ( isset($UTF8_UPPER_TO_LOWER[$uni[$i]]) ) { - $uni[$i] = $UTF8_UPPER_TO_LOWER[$uni[$i]]; - } - } - - return utf8_from_unicode($uni); -} - -//--------------------------------------------------------------- -/** -* 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 -* Note: requires utf8_to_unicode and utf8_from_unicode -* @author Andreas Gohr -* @param string -* @return mixed either string in lowercase or FALSE is UTF-8 invalid -* @see http://www.php.net/strtoupper -* @see utf8_to_unicode -* @see utf8_from_unicode -* @see http://www.unicode.org/reports/tr21/tr21-5.html -* @see http://dev.splitbrain.org/view/darcs/dokuwiki/inc/utf8.php -* @package utf8 -* @subpackage strings -*/ -function utf8_strtoupper($string){ - - static $UTF8_LOWER_TO_UPPER = NULL; - - if ( is_null($UTF8_LOWER_TO_UPPER) ) { - $UTF8_LOWER_TO_UPPER = array( - 0x0061=>0x0041, 0x03C6=>0x03A6, 0x0163=>0x0162, 0x00E5=>0x00C5, 0x0062=>0x0042, - 0x013A=>0x0139, 0x00E1=>0x00C1, 0x0142=>0x0141, 0x03CD=>0x038E, 0x0101=>0x0100, - 0x0491=>0x0490, 0x03B4=>0x0394, 0x015B=>0x015A, 0x0064=>0x0044, 0x03B3=>0x0393, - 0x00F4=>0x00D4, 0x044A=>0x042A, 0x0439=>0x0419, 0x0113=>0x0112, 0x043C=>0x041C, - 0x015F=>0x015E, 0x0144=>0x0143, 0x00EE=>0x00CE, 0x045E=>0x040E, 0x044F=>0x042F, - 0x03BA=>0x039A, 0x0155=>0x0154, 0x0069=>0x0049, 0x0073=>0x0053, 0x1E1F=>0x1E1E, - 0x0135=>0x0134, 0x0447=>0x0427, 0x03C0=>0x03A0, 0x0438=>0x0418, 0x00F3=>0x00D3, - 0x0440=>0x0420, 0x0454=>0x0404, 0x0435=>0x0415, 0x0449=>0x0429, 0x014B=>0x014A, - 0x0431=>0x0411, 0x0459=>0x0409, 0x1E03=>0x1E02, 0x00F6=>0x00D6, 0x00F9=>0x00D9, - 0x006E=>0x004E, 0x0451=>0x0401, 0x03C4=>0x03A4, 0x0443=>0x0423, 0x015D=>0x015C, - 0x0453=>0x0403, 0x03C8=>0x03A8, 0x0159=>0x0158, 0x0067=>0x0047, 0x00E4=>0x00C4, - 0x03AC=>0x0386, 0x03AE=>0x0389, 0x0167=>0x0166, 0x03BE=>0x039E, 0x0165=>0x0164, - 0x0117=>0x0116, 0x0109=>0x0108, 0x0076=>0x0056, 0x00FE=>0x00DE, 0x0157=>0x0156, - 0x00FA=>0x00DA, 0x1E61=>0x1E60, 0x1E83=>0x1E82, 0x00E2=>0x00C2, 0x0119=>0x0118, - 0x0146=>0x0145, 0x0070=>0x0050, 0x0151=>0x0150, 0x044E=>0x042E, 0x0129=>0x0128, - 0x03C7=>0x03A7, 0x013E=>0x013D, 0x0442=>0x0422, 0x007A=>0x005A, 0x0448=>0x0428, - 0x03C1=>0x03A1, 0x1E81=>0x1E80, 0x016D=>0x016C, 0x00F5=>0x00D5, 0x0075=>0x0055, - 0x0177=>0x0176, 0x00FC=>0x00DC, 0x1E57=>0x1E56, 0x03C3=>0x03A3, 0x043A=>0x041A, - 0x006D=>0x004D, 0x016B=>0x016A, 0x0171=>0x0170, 0x0444=>0x0424, 0x00EC=>0x00CC, - 0x0169=>0x0168, 0x03BF=>0x039F, 0x006B=>0x004B, 0x00F2=>0x00D2, 0x00E0=>0x00C0, - 0x0434=>0x0414, 0x03C9=>0x03A9, 0x1E6B=>0x1E6A, 0x00E3=>0x00C3, 0x044D=>0x042D, - 0x0436=>0x0416, 0x01A1=>0x01A0, 0x010D=>0x010C, 0x011D=>0x011C, 0x00F0=>0x00D0, - 0x013C=>0x013B, 0x045F=>0x040F, 0x045A=>0x040A, 0x00E8=>0x00C8, 0x03C5=>0x03A5, - 0x0066=>0x0046, 0x00FD=>0x00DD, 0x0063=>0x0043, 0x021B=>0x021A, 0x00EA=>0x00CA, - 0x03B9=>0x0399, 0x017A=>0x0179, 0x00EF=>0x00CF, 0x01B0=>0x01AF, 0x0065=>0x0045, - 0x03BB=>0x039B, 0x03B8=>0x0398, 0x03BC=>0x039C, 0x045C=>0x040C, 0x043F=>0x041F, - 0x044C=>0x042C, 0x00FE=>0x00DE, 0x00F0=>0x00D0, 0x1EF3=>0x1EF2, 0x0068=>0x0048, - 0x00EB=>0x00CB, 0x0111=>0x0110, 0x0433=>0x0413, 0x012F=>0x012E, 0x00E6=>0x00C6, - 0x0078=>0x0058, 0x0161=>0x0160, 0x016F=>0x016E, 0x03B1=>0x0391, 0x0457=>0x0407, - 0x0173=>0x0172, 0x00FF=>0x0178, 0x006F=>0x004F, 0x043B=>0x041B, 0x03B5=>0x0395, - 0x0445=>0x0425, 0x0121=>0x0120, 0x017E=>0x017D, 0x017C=>0x017B, 0x03B6=>0x0396, - 0x03B2=>0x0392, 0x03AD=>0x0388, 0x1E85=>0x1E84, 0x0175=>0x0174, 0x0071=>0x0051, - 0x0437=>0x0417, 0x1E0B=>0x1E0A, 0x0148=>0x0147, 0x0105=>0x0104, 0x0458=>0x0408, - 0x014D=>0x014C, 0x00ED=>0x00CD, 0x0079=>0x0059, 0x010B=>0x010A, 0x03CE=>0x038F, - 0x0072=>0x0052, 0x0430=>0x0410, 0x0455=>0x0405, 0x0452=>0x0402, 0x0127=>0x0126, - 0x0137=>0x0136, 0x012B=>0x012A, 0x03AF=>0x038A, 0x044B=>0x042B, 0x006C=>0x004C, - 0x03B7=>0x0397, 0x0125=>0x0124, 0x0219=>0x0218, 0x00FB=>0x00DB, 0x011F=>0x011E, - 0x043E=>0x041E, 0x1E41=>0x1E40, 0x03BD=>0x039D, 0x0107=>0x0106, 0x03CB=>0x03AB, - 0x0446=>0x0426, 0x00FE=>0x00DE, 0x00E7=>0x00C7, 0x03CA=>0x03AA, 0x0441=>0x0421, - 0x0432=>0x0412, 0x010F=>0x010E, 0x00F8=>0x00D8, 0x0077=>0x0057, 0x011B=>0x011A, - 0x0074=>0x0054, 0x006A=>0x004A, 0x045B=>0x040B, 0x0456=>0x0406, 0x0103=>0x0102, - 0x03BB=>0x039B, 0x00F1=>0x00D1, 0x043D=>0x041D, 0x03CC=>0x038C, 0x00E9=>0x00C9, - 0x00F0=>0x00D0, 0x0457=>0x0407, 0x0123=>0x0122, - ); - } - - $uni = utf8_to_unicode($string); - - if ( !$uni ) { - return FALSE; - } - - $cnt = count($uni); - for ($i=0; $i < $cnt; $i++){ - if( isset($UTF8_LOWER_TO_UPPER[$uni[$i]]) ) { - $uni[$i] = $UTF8_LOWER_TO_UPPER[$uni[$i]]; - } - } - - return utf8_from_unicode($uni); -} diff --git a/e107_handlers/utf8/utils/unicode.php b/e107_handlers/utf8/utils/unicode.php deleted file mode 100644 index 3c54bc4d3..000000000 --- a/e107_handlers/utf8/utils/unicode.php +++ /dev/null @@ -1,269 +0,0 @@ - 0xFFFF. Occurrances of the BOM are ignored. Surrogates -* are not allowed. -* Returns false if the input string isn't a valid UTF-8 octet sequence -* and raises a PHP error at level E_USER_WARNING -* Note: this function has been modified slightly in this library to -* trigger errors on encountering bad bytes -* @author -* @param string UTF-8 encoded string -* @return mixed array of unicode code points or FALSE if UTF-8 invalid -* @see utf8_from_unicode -* @see http://hsivonen.iki.fi/php-utf8/ -* @package utf8 -* @subpackage unicode -*/ -function utf8_to_unicode($str) { - $mState = 0; // cached expected number of octets after the current octet - // until the beginning of the next UTF8 character sequence - $mUcs4 = 0; // cached Unicode character - $mBytes = 1; // cached expected number of octets in the current sequence - - $out = array(); - - $len = strlen($str); - - for($i = 0; $i < $len; $i++) { - - $in = ord($str[$i]); - - if ( $mState == 0) { - - // When mState is zero we expect either a US-ASCII character or a - // multi-octet sequence. - if (0 == (0x80 & ($in))) { - // US-ASCII, pass straight through. - $out[] = $in; - $mBytes = 1; - - } else if (0xC0 == (0xE0 & ($in))) { - // First octet of 2 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x1F) << 6; - $mState = 1; - $mBytes = 2; - - } else if (0xE0 == (0xF0 & ($in))) { - // First octet of 3 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x0F) << 12; - $mState = 2; - $mBytes = 3; - - } else if (0xF0 == (0xF8 & ($in))) { - // First octet of 4 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x07) << 18; - $mState = 3; - $mBytes = 4; - - } else if (0xF8 == (0xFC & ($in))) { - /* First octet of 5 octet sequence. - * - * This is illegal because the encoded codepoint must be either - * (a) not the shortest form or - * (b) outside the Unicode range of 0-0x10FFFF. - * Rather than trying to resynchronize, we will carry on until the end - * of the sequence and let the later error handling code catch it. - */ - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x03) << 24; - $mState = 4; - $mBytes = 5; - - } else if (0xFC == (0xFE & ($in))) { - // First octet of 6 octet sequence, see comments for 5 octet sequence. - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 1) << 30; - $mState = 5; - $mBytes = 6; - - } else { - /* Current octet is neither in the US-ASCII range nor a legal first - * octet of a multi-octet sequence. - */ - trigger_error( - 'utf8_to_unicode: Illegal sequence identifier '. - 'in UTF-8 at byte '.$i, - E_USER_WARNING - ); - return FALSE; - - } - - } else { - - // When mState is non-zero, we expect a continuation of the multi-octet - // sequence - if (0x80 == (0xC0 & ($in))) { - - // Legal continuation. - $shift = ($mState - 1) * 6; - $tmp = $in; - $tmp = ($tmp & 0x0000003F) << $shift; - $mUcs4 |= $tmp; - - /** - * End of the multi-octet sequence. mUcs4 now contains the final - * Unicode codepoint to be output - */ - if (0 == --$mState) { - - /* - * Check for illegal sequences and codepoints. - */ - // From Unicode 3.1, non-shortest form is illegal - if (((2 == $mBytes) && ($mUcs4 < 0x0080)) || - ((3 == $mBytes) && ($mUcs4 < 0x0800)) || - ((4 == $mBytes) && ($mUcs4 < 0x10000)) || - (4 < $mBytes) || - // From Unicode 3.2, surrogate characters are illegal - (($mUcs4 & 0xFFFFF800) == 0xD800) || - // Codepoints outside the Unicode range are illegal - ($mUcs4 > 0x10FFFF)) { - - trigger_error( - 'utf8_to_unicode: Illegal sequence or codepoint '. - 'in UTF-8 at byte '.$i, - E_USER_WARNING - ); - - return FALSE; - - } - - if (0xFEFF != $mUcs4) { - // BOM is legal but we don't want to output it - $out[] = $mUcs4; - } - - //initialize UTF8 cache - $mState = 0; - $mUcs4 = 0; - $mBytes = 1; - } - - } else { - /** - *((0xC0 & (*in) != 0x80) && (mState != 0)) - * Incomplete multi-octet sequence. - */ - trigger_error( - 'utf8_to_unicode: Incomplete multi-octet '. - ' sequence in UTF-8 at byte '.$i, - E_USER_WARNING - ); - - return FALSE; - } - } - } - return $out; -} - -//-------------------------------------------------------------------- -/** -* Takes an array of ints representing the Unicode characters and returns -* a UTF-8 string. Astral planes are supported ie. the ints in the -* input can be > 0xFFFF. Occurrances of the BOM are ignored. Surrogates -* are not allowed. -* Returns false if the input array contains ints that represent -* surrogates or are outside the Unicode range -* and raises a PHP error at level E_USER_WARNING -* Note: this function has been modified slightly in this library to use -* output buffering to concatenate the UTF-8 string (faster) as well as -* reference the array by it's keys -* @param array of unicode code points representing a string -* @return mixed UTF-8 string or FALSE if array contains invalid code points -* @author -* @see utf8_to_unicode -* @see http://hsivonen.iki.fi/php-utf8/ -* @package utf8 -* @subpackage unicode -*/ -function utf8_from_unicode($arr) { - ob_start(); - - foreach (array_keys($arr) as $k) { - - # ASCII range (including control chars) - if ( ($arr[$k] >= 0) && ($arr[$k] <= 0x007f) ) { - - echo chr($arr[$k]); - - # 2 byte sequence - } else if ($arr[$k] <= 0x07ff) { - - echo chr(0xc0 | ($arr[$k] >> 6)); - echo chr(0x80 | ($arr[$k] & 0x003f)); - - # Byte order mark (skip) - } else if($arr[$k] == 0xFEFF) { - - // nop -- zap the BOM - - # Test for illegal surrogates - } else if ($arr[$k] >= 0xD800 && $arr[$k] <= 0xDFFF) { - - // found a surrogate - trigger_error( - 'utf8_from_unicode: Illegal surrogate '. - 'at index: '.$k.', value: '.$arr[$k], - E_USER_WARNING - ); - - return FALSE; - - # 3 byte sequence - } else if ($arr[$k] <= 0xffff) { - - echo chr(0xe0 | ($arr[$k] >> 12)); - echo chr(0x80 | (($arr[$k] >> 6) & 0x003f)); - echo chr(0x80 | ($arr[$k] & 0x003f)); - - # 4 byte sequence - } else if ($arr[$k] <= 0x10ffff) { - - echo chr(0xf0 | ($arr[$k] >> 18)); - echo chr(0x80 | (($arr[$k] >> 12) & 0x3f)); - echo chr(0x80 | (($arr[$k] >> 6) & 0x3f)); - echo chr(0x80 | ($arr[$k] & 0x3f)); - - } else { - - trigger_error( - 'utf8_from_unicode: Codepoint out of Unicode range '. - 'at index: '.$k.', value: '.$arr[$k], - E_USER_WARNING - ); - - // out of range - return FALSE; - } - } - - $result = ob_get_contents(); - ob_end_clean(); - return $result; -} diff --git a/install.php b/install.php index 0c8eb9348..de39bc542 100644 --- a/install.php +++ b/install.php @@ -328,17 +328,17 @@ function cookie($name, $value, $expire=0, $path = e_HTTP, $domain = '', $secure class e_install { - var $paths; - var $template; - var $debug_info; - var $debug_db_info; - var $e107; - var $previous_steps; - var $stage; - var $post_data; - var $required = array(); - var $dbLink = NULL; // DB link - needed for PHP5.3 bug - var $session = null; +// private $paths; + public $template; + private $debug_info; +// private $debug_db_info; + private $e107; + public $previous_steps; + private $stage; + private $post_data; + private $required = array(); + + private $session; protected $pdo = false; protected $debug = false; @@ -699,7 +699,7 @@ class e_install $this->previous_steps['mysql']['user'] = trim($tp->filter($_POST['name'])); $this->previous_steps['mysql']['password'] = trim($tp->filter($_POST['password'])); $this->previous_steps['mysql']['db'] = trim($tp->filter($_POST['db'])); - $this->previous_steps['mysql']['createdb'] = (isset($_POST['createdb']) && $_POST['createdb'] == true ? true : false); + $this->previous_steps['mysql']['createdb'] = isset($_POST['createdb']) && $_POST['createdb'] == true; $this->previous_steps['mysql']['prefix'] = trim($tp->filter($_POST['prefix'])); $this->setDb(); @@ -710,7 +710,7 @@ class e_install $this->previous_steps['mysql']['overwritedb'] = 1; } - $success = $this->check_name($this->previous_steps['mysql']['db'], FALSE) && $this->check_name($this->previous_steps['mysql']['prefix'], TRUE); + $success = $this->check_name($this->previous_steps['mysql']['db']) && $this->check_name($this->previous_steps['mysql']['prefix'], TRUE); if ($success) { @@ -903,7 +903,7 @@ class e_install $this->template->SetTag("stage_title", LANINS_008); $this->template->SetTag("percent", 50); $this->template->SetTag("bartype", 'warning'); - $not_writable = $this->check_writable_perms('must_write'); // Some directories MUST be writable + $not_writable = $this->check_writable_perms(); // Some directories MUST be writable $opt_writable = $this->check_writable_perms('can_write'); // Some directories CAN optionally be writable $version_fail = false; $perms_errors = ""; @@ -1654,8 +1654,8 @@ if($this->pdo == true) { global $e_forms; - $data = array('name'=>$this->previous_steps['prefs']['sitename'], 'theme'=>$this->previous_steps['prefs']['sitetheme'], 'language'=>$this->previous_steps['language'], 'url'=>$_SERVER['HTTP_REFERER']);; - $base = base64_encode(http_build_query($data, null, '&')); + $data = array('name'=>$this->previous_steps['prefs']['sitename'], 'theme'=>$this->previous_steps['prefs']['sitetheme'], 'language'=>$this->previous_steps['language'], 'url'=>$_SERVER['HTTP_REFERER']); + $base = base64_encode(http_build_query($data, null)); $url = "https://e107.org/e-install/".$base; $e_forms->add_plain_html(""); @@ -1812,8 +1812,8 @@ if($this->pdo == true) // Admin log fix - don't allow logs to be called inside pref handler // FIX - e107::getConfig('core')->setParam('nologs', true); // change to false to enable log - $pref = e107::getConfig('core')->getPref(); + e107::getConfig()->setParam('nologs', true); // change to false to enable log + $pref = e107::getConfig()->getPref(); // Set Preferences defined during install - overwriting those that may exist in the XML. @@ -1837,7 +1837,7 @@ if($this->pdo == true) ### URL related prefs // set all prefs so that they are available, required for adminReadModules() - it checks which plugins are installed - e107::getConfig('core')->setPref($this->previous_steps['prefs']); + e107::getConfig()->setPref($this->previous_steps['prefs']); $url_modules = eRouter::adminReadModules(); $url_locations = eRouter::adminBuildLocations($url_modules); @@ -1863,8 +1863,8 @@ if($this->pdo == true) } // Set prefs, save - e107::getConfig('core')->setPref($this->previous_steps['prefs']); - e107::getConfig('core')->save(FALSE,TRUE, FALSE); // save preferences made during install. + e107::getConfig()->setPref($this->previous_steps['prefs']); + e107::getConfig()->save(FALSE,TRUE, FALSE); // save preferences made during install. installLog::add('Core prefs set to install choices'); // Create the admin user - replacing any that may be been included in the XML. @@ -2127,7 +2127,7 @@ if($this->pdo == true) installLog::add("DB Connection made"); - $this->dbLink = $link; // Needed for mysql_close() to work round bug in PHP 5.3 + // $dbLink = $link; // Needed for mysql_close() to work round bug in PHP 5.3 // $db_selected = mysql_select_db($this->previous_steps['mysql']['db'], $link); $db_selected = $sql->database($this->previous_steps['mysql']['db'],$this->previous_steps['mysql']['prefix']); if(!$db_selected) @@ -2242,8 +2242,8 @@ if($this->pdo == true) class e_forms { - var $form; - var $opened; + public $form; + private $opened; function start_form($id, $action, $method = "post" ) { @@ -2353,9 +2353,9 @@ function create_tables_unattended() class SimpleTemplate { - var $Tags = array(); - var $open_tag = "{"; - var $close_tag = "}"; + private $Tags = array(); + private $open_tag = "{"; + private $close_tag = "}"; function __construct() { @@ -2402,7 +2402,7 @@ class SimpleTemplate function template_data() { - $data = ' + return ' @@ -2519,7 +2519,7 @@ function template_data() '; - return $data; + } /**