<?php
/**
*
*  Copyright:  (c) 2004 - 2008 [AOKOSOFT] Read8
*  Web Site:   http://www.aokosoft.com http://www.read8.net
*  Powered by: [AOKOSOFT] Read8 Group
*  Support:    http://bbs.read8.net
*  License:    http://www.read8.net/license
*
*/
if(!defined('IN_Read8')) {
	exit('Access Denied (string.func.php)');
}

/*
	字符串函数库
*/

if(!defined('LF')) {
	define('LF', "\n");
}
if(!defined('CR')) {
	define('CR', "\r");
}
if(!defined('HT')) {
	define('HT', "\t");
}

if(!defined('SYSCHARSET')) {
	define('SYSCHARSET', 'utf-8');
}

if(!function_exists('stripos')) {
	function stripos($haystack, $needle, $offset = 0){
		return strpos(strtolower($haystack), strtolower($needle), $offset);
	}
}
if(!function_exists('strripos')) {
	function strripos($haystack, $needle, $offset = 0){
		return strrpos(strtolower($haystack), strtolower($needle), $offset);
	}
}

function convert($text, $from, $to){
	if(is_array($text))
		foreach($text as $key => $val)
			$text[$key] = convert($val, $from, $to);
	else
		$text = mb_convert_encoding($text, $to, $from);
	return $text;
}


function rmb_strlen($string, $countASone = false){
	if($countASone)
		return mb_strlen($string, SYSCHARSET);

	return strlen(convert($string, SYSCHARSET, 'GBK'));
}
function rmb_substr($string, $start, $length){
	return convert(mb_substr(convert($string, SYSCHARSET, 'GBK'), $start, $length, 'GBK'), 'GBK', SYSCHARSET);
}

function _ellipsis($text, $maxlen){
	$text = convert($text, 'utf-8', 'gbk');
	if(strlen($text) > $maxlen * 2) {
		$length = $maxlen * 2;
		$j = 0;
		for($i = 0; $i < $length; $i++) {
			if(ord($text[$i]) > 0x80) {
				$i++;
				continue;
			}else {
				$j++;
			}
		}

		$text = mb_substr($text, 0, $maxlen + floor($j / 2) - 1, 'gbk').'..';
	}
	return convert($text, 'gbk', 'utf-8');
}


function rsubstr($string, $after = false, $before = ''){
	if(false === $after) {
		$sp = 0;
	}elseif(!$after) {
		return false;
	}else {
		$sp = strpos($string, $after);
	}
	if(false === $sp)
		return false;

	$sp += strlen($after);

	if($before) {
		$ep = strpos($string, $before, $sp);
	}else {
		$ep = 0;
	}
	if(false === $ep)
		return false;

	if($ep) {
		return substr($string, $sp, $ep - $sp);
	}else {
		return substr($string, $sp);
	}
}

function parse_tags($tag){
	$tags = array();
	foreach(explode(',', $tag) as $v) {
		$tags[] = array(
			'tag'    => trim($v),
			'encode' => rawurlencode(trim($v)),
		);
	}
	return $tags;
}

function html_show_crlf($string){
	if(is_array($string))
		foreach($string as $k => $v)
			$string[$k] = html_show_crlf($v);
	else
		$string = str_replace(array(' ', CR.LF, LF, HT), array('&nbsp;', '<br />', '<br />', '&nbsp;&nbsp;&nbsp;&nbsp;'), $string);

	return $string;
}
function html_show_crlf_decode($string){
	if(is_array($string))
		foreach($string as $k => $v)
			$string[$k] = html_show_crlf_decode($v);
	else
		$string = str_replace(array('&nbsp;&nbsp;&nbsp;&nbsp;', '<br />', '&nbsp;'), array(HT, LF, ' '), $string);

	return $string;
}
function html_show($string, $showcrlf = true){
	if(is_array($string))
		foreach($string as $k => $v)
			$string[$k] = html_show($v, $showcrlf);
	else
		$string = str_replace(array('&', '<', '>', '"', "'", '\\'), array('&amp;', '&lt;', '&gt;', '&quot;', '&#039;', '&#092;'), $string);

	if(!is_array($string) && $showcrlf)
		return html_show_crlf($string);

	return $string;
}
function html_show_decode($string){
	if(is_array($string))
		foreach($string as $k => $v)
			$string[$k] = html_show_decode($v);
	else
		$string = str_replace(array('&#092;', '&#039;', '&quot;', '&gt;', '&lt;', '&amp;'), array('\\', "'", '"', '>', '<', '&'), html_show_crlf_decode($string));

	return $string;
}
function show_text($string, $allowhtml = false){
	if($allowhtml) {
		return nl2br($string);
	}else {
		return html_show($string);
	}
}

function split_sql($sql){
	global $_SYSTEM;

	$sql = str_replace(CR, '', $sql);
	$sqls = array();
	foreach(explode(';'.LF, $sql) as $sql) {
		$sql = trim($sql);
		if(!$sql || $sql[0] == '#' || $sql[0] == '-')
			continue;

		$sqls[] = str_replace(array('\r', '\n', '`rd8_'), array(CR, LF, '`'.$_SYSTEM['db_prefix']), $sql);
	}
	return $sqls;
}


function rstrip_tags($str, $allowable_tags = ''){
	if(is_array($str))
		foreach($str as $k => $v)
			$str[$k] = rstrip_tags($str, $allowable_tags);
	else
		$str = strip_tags($str, $allowable_tags);

	return $str;
}

function super_trim($str, $charlist = " \t\n\r\0\x0B"){
	if(is_array($str))
		foreach($str as $k => $v)
			$str[$k] = super_trim($str, $charlist);
	else
		$str = trim($str, $charlist);

	return $str;
}


function seo_description($string){
	return '';
}
function seo_tag($string){
	return '';
}




function pinyin_unique($pinyin){
	global $db;

	$suffix = array();
	$rs = $db->select(array(
		'field' => 'pinyin',
		'from'  => __TAB_NOVEL__,
		'where' => 'WHERE pinyin LIKE \''.$pinyin.'%\'',
	));
	foreach($rs as $r) {
		$suffix[] = intval(substr($r['pinyin'], 0, strlen($pinyin)));
	}
	$rs = $db->select(array(
		'field' => 'pinyin',
		'from'  => __TAB_MY_AUT__,
		'where' => 'WHERE pinyin LIKE \''.$pinyin.'%\'',
	));
	foreach($rs as $r) {
		$suffix[] = intval(substr($r['pinyin'], 0, strlen($pinyin)));
	}

	if(!empty($suffix)) {
		return $pinyin.(max($suffix) + 1);
	}else {
		return $pinyin;
	}
}


function pinyin($string, $initial = false){
	$string = convert($string, SYSCHARSET, 'GBK');

	if($initial) {
		$charcode = ord(substr($string, 0, 1));
		if($charcode > 160) {
			$tempchar = ord(substr($string, 1, 1));
			$charcode = $charcode * 256 + $tempchar - 65536;
		}
		return substr(pinyin_generate($charcode), 0, 1);
	}else {
		$pinyin = '';
		$length = strlen($string);
		for($i = 0; $i < $length; $i++) {
			$charcode = ord(substr($string, $i, 1));
			if($charcode > 160) {
				$tempchar = ord(substr($string, ++$i, 1));
				$charcode = $charcode * 256 + $tempchar - 65536;
			}
			$pinyin .= pinyin_generate($charcode);
		}

		if(!$pinyin)
			$pinyin = '_';

		return $pinyin;
	}
}
function pinyin_generate($charcode){
	if(($charcode > 47 && $charcode < 58) || ($charcode > 64 && $charcode < 91)) {
		return chr($charcode);
	}elseif($charcode > 96 && $charcode < 123) {
		return strtoupper(chr($charcode));
	}elseif($charcode < -20319 || $charcode > -10247) {
		return '_';
	}else {
		$pinyin_code = pinyin_code_table();
		for($i = count($pinyin_code) - 1; $i >= 0; $i--)
			if($pinyin_code[$i][1] <= $charcode)
				break;

		return $pinyin_code[$i][0];
	}
}
function pinyin_code_table(){
	return array(
		array('a',      -20319),
			array('ai',     -20317),
			array('an',     -20304),
			array('ang',    -20295),
			array('ao',     -20292),
		array('ba',     -20283),
			array('bai',    -20265),
			array('ban',    -20257),
			array('bang',   -20242),
			array('bao',    -20230),
			array('bei',    -20051),
			array('ben',    -20036),
			array('beng',   -20032),
			array('bi',     -20026),
			array('bian',   -20002),
			array('biao',   -19990),
			array('bie',    -19986),
			array('bin',    -19982),
			array('bing',   -19976),
			array('bo',     -19805),
			array('bu',     -19784),
		array('ca',     -19775),
			array('cai',    -19774),
			array('can',    -19763),
			array('cang',   -19756),
			array('cao',    -19751),
			array('ce',     -19746),
			array('ceng',   -19741),
			array('cha',    -19739),
			array('chai',   -19728),
			array('chan',   -19725),
			array('chang',  -19715),
			array('chao',   -19540),
			array('che',    -19531),
			array('chen',   -19525),
			array('cheng',  -19515),
			array('chi',    -19500),
			array('chong',  -19484),
			array('chou',   -19479),
			array('chu',    -19467),
			array('chuai',  -19289),
			array('chuan',  -19288),
			array('chuang', -19281),
			array('chui',   -19275),
			array('chun',   -19270),
			array('chuo',   -19263),
			array('ci',     -19261),
			array('cong',   -19249),
			array('cou',    -19243),
			array('cu',     -19242),
			array('cuan',   -19238),
			array('cui',    -19235),
			array('cun',    -19227),
			array('cuo',    -19224),
		array('da',     -19218),
			array('dai',    -19212),
			array('dan',    -19038),
			array('dang',   -19023),
			array('dao',    -19018),
			array('de',     -19006),
			array('deng',   -19003),
			array('di',     -18996),
			array('dian',   -18977),
			array('diao',   -18961),
			array('die',    -18952),
			array('ding',   -18783),
			array('diu',    -18774),
			array('dong',   -18773),
			array('dou',    -18763),
			array('du',     -18756),
			array('duan',   -18741),
			array('dui',    -18735),
			array('dun',    -18731),
			array('duo',    -18722),
		array('e',      -18710),
			array('en',     -18697),
			array('er',     -18696),
		array('fa',     -18526),
			array('fan',    -18518),
			array('fang',   -18501),
			array('fei',    -18490),
			array('fen',    -18478),
			array('feng',   -18463),
			array('fo',     -18448),
			array('fou',    -18447),
			array('fu',     -18446),
		array('ga',     -18239),
			array('gai',    -18237),
			array('gan',    -18231),
			array('gang',   -18220),
			array('gao',    -18211),
			array('ge',     -18201),
			array('gei',    -18184),
			array('gen',    -18183),
			array('geng',   -18181),
			array('gong',   -18012),
			array('gou',    -17997),
			array('gu',     -17988),
			array('gua',    -17970),
			array('guai',   -17964),
			array('guan',   -17961),
			array('guang',  -17950),
			array('gui',    -17947),
			array('gun',    -17931),
			array('guo',    -17928),
		array('ha',     -17922),
			array('hai',    -17759),
			array('han',    -17752),
			array('hang',   -17733),
			array('hao',    -17730),
			array('he',     -17721),
			array('hei',    -17703),
			array('hen',    -17701),
			array('heng',   -17697),
			array('hong',   -17692),
			array('hou',    -17683),
			array('hu',     -17676),
			array('hua',    -17496),
			array('huai',   -17487),
			array('huan',   -17482),
			array('huang',  -17468),
			array('hui',    -17454),
			array('hun',    -17433),
			array('huo',    -17427),
		array('ji',     -17417),
			array('jia',    -17202),
			array('jian',   -17185),
			array('jiang',  -16983),
			array('jiao',   -16970),
			array('jie',    -16942),
			array('jin',    -16915),
			array('jing',   -16733),
			array('jiong',  -16708),
			array('jiu',    -16706),
			array('ju',     -16689),
			array('juan',   -16664),
			array('jue',    -16657),
			array('jun',    -16647),
		array('ka',     -16474),
			array('kai',    -16470),
			array('kan',    -16465),
			array('kang',   -16459),
			array('kao',    -16452),
			array('ke',     -16448),
			array('ken',    -16433),
			array('keng',   -16429),
			array('kong',   -16427),
			array('kou',    -16423),
			array('ku',     -16419),
			array('kua',    -16412),
			array('kuai',   -16407),
			array('kuan',   -16403),
			array('kuang',  -16401),
			array('kui',    -16393),
			array('kun',    -16220),
			array('kuo',    -16216),
		array('la',     -16212),
			array('lai',    -16205),
			array('lan',    -16202),
			array('lang',   -16187),
			array('lao',    -16180),
			array('le',     -16171),
			array('lei',    -16169),
			array('leng',   -16158),
			array('li',     -16155),
			array('lia',    -15959),
			array('lian',   -15958),
			array('liang',  -15944),
			array('liao',   -15933),
			array('lie',    -15920),
			array('lin',    -15915),
			array('ling',   -15903),
			array('liu',    -15889),
			array('long',   -15878),
			array('lou',    -15707),
			array('lu',     -15701),
			array('lv',     -15681),
			array('luan',   -15667),
			array('lue',    -15661),
			array('lun',    -15659),
			array('luo',    -15652),
		array('ma',     -15640),
			array('mai',    -15631),
			array('man',    -15625),
			array('mang',   -15454),
			array('mao',    -15448),
			array('me',     -15436),
			array('mei',    -15435),
			array('men',    -15419),
			array('meng',   -15416),
			array('mi',     -15408),
			array('mian',   -15394),
			array('miao',   -15385),
			array('mie',    -15377),
			array('min',    -15375),
			array('ming',   -15369),
			array('miu',    -15363),
			array('mo',     -15362),
			array('mou',    -15183),
			array('mu',     -15180),
		array('na',     -15165),
			array('nai',    -15158),
			array('nan',    -15153),
			array('nang',   -15150),
			array('nao',    -15149),
			array('ne',     -15144),
			array('nei',    -15143),
			array('nen',    -15141),
			array('neng',   -15140),
			array('ni',     -15139),
			array('nian',   -15128),
			array('niang',  -15121),
			array('niao',   -15119),
			array('nie',    -15117),
			array('nin',    -15110),
			array('ning',   -15109),
			array('niu',    -14941),
			array('nong',   -14937),
			array('nu',     -14933),
			array('nv',     -14930),
			array('nuan',   -14929),
			array('nue',    -14928),
			array('nuo',    -14926),
		array('o',      -14922),
			array('ou',     -14921),
		array('pa',     -14914),
			array('pai',    -14908),
			array('pan',    -14902),
			array('pang',   -14894),
			array('pao',    -14889),
			array('pei',    -14882),
			array('pen',    -14873),
			array('peng',   -14871),
			array('pi',     -14857),
			array('pian',   -14678),
			array('piao',   -14674),
			array('pie',    -14670),
			array('pin',    -14668),
			array('ping',   -14663),
			array('po',     -14654),
			array('pu',     -14645),
		array('qi',     -14630),
			array('qia',    -14594),
			array('qian',   -14429),
			array('qiang',  -14407),
			array('qiao',   -14399),
			array('qie',    -14384),
			array('qin',    -14379),
			array('qing',   -14368),
			array('qiong',  -14355),
			array('qiu',    -14353),
			array('qu',     -14345),
			array('quan',   -14170),
			array('que',    -14159),
			array('qun',    -14151),
		array('ran',    -14149),
			array('rang',   -14145),
			array('rao',    -14140),
			array('re',     -14137),
			array('ren',    -14135),
			array('reng',   -14125),
			array('ri',     -14123),
			array('rong',   -14122),
			array('rou',    -14112),
			array('ru',     -14109),
			array('ruan',   -14099),
			array('rui',    -14097),
			array('run',    -14094),
			array('ruo',    -14092),
		array('sa',     -14090),
			array('sai',    -14087),
			array('san',    -14083),
			array('sang',   -13917),
			array('sao',    -13914),
			array('se',     -13910),
			array('sen',    -13907),
			array('seng',   -13906),
			array('sha',    -13905),
			array('shai',   -13896),
			array('shan',   -13894),
			array('shang',  -13878),
			array('shao',   -13870),
			array('she',    -13859),
			array('shen',   -13847),
			array('sheng',  -13831),
			array('shi',    -13658),
			array('shou',   -13611),
			array('shu',    -13601),
			array('shua',   -13406),
			array('shuai',  -13404),
			array('shuan',  -13400),
			array('shuang', -13398),
			array('shui',   -13395),
			array('shun',   -13391),
			array('shuo',   -13387),
			array('si',     -13383),
			array('song',   -13367),
			array('sou',    -13359),
			array('su',     -13356),
			array('suan',   -13343),
			array('sui',    -13340),
			array('sun',    -13329),
			array('suo',    -13326),
		array('ta',     -13318),
			array('tai',    -13147),
			array('tan',    -13138),
			array('tang',   -13120),
			array('tao',    -13107),
			array('te',     -13096),
			array('teng',   -13095),
			array('ti',     -13091),
			array('tian',   -13076),
			array('tiao',   -13068),
			array('tie',    -13063),
			array('ting',   -13060),
			array('tong',   -12888),
			array('tou',    -12875),
			array('tu',     -12871),
			array('tuan',   -12860),
			array('tui',    -12858),
			array('tun',    -12852),
			array('tuo',    -12849),
		array('wa',     -12838),
			array('wai',    -12831),
			array('wan',    -12829),
			array('wang',   -12812),
			array('wei',    -12802),
			array('wen',    -12607),
			array('weng',   -12597),
			array('wo',     -12594),
			array('wu',     -12585),
		array('xi',     -12556),
			array('xia',    -12359),
			array('xian',   -12346),
			array('xiang',  -12320),
			array('xiao',   -12300),
			array('xie',    -12120),
			array('xin',    -12099),
			array('xing',   -12089),
			array('xiong',  -12074),
			array('xiu',    -12067),
			array('xu',     -12058),
			array('xuan',   -12039),
			array('xue',    -11867),
			array('xun',    -11861),
		array('ya',     -11847),
			array('yan',    -11831),
			array('yang',   -11798),
			array('yao',    -11781),
			array('ye',     -11604),
			array('yi',     -11589),
			array('yin',    -11536),
			array('ying',   -11358),
			array('yo',     -11340),
			array('yong',   -11339),
			array('you',    -11324),
			array('yu',     -11303),
			array('yuan',   -11097),
			array('yue',    -11077),
			array('yun',    -11067),
		array('za',     -11055),
			array('zai',    -11052),
			array('zan',    -11045),
			array('zang',   -11041),
			array('zao',    -11038),
			array('ze',     -11024),
			array('zei',    -11020),
			array('zen',    -11019),
			array('zeng',   -11018),
			array('zha',    -11014),
			array('zhai',   -10838),
			array('zhan',   -10832),
			array('zhang',  -10815),
			array('zhao',   -10800),
			array('zhe',    -10790),
			array('zhen',   -10780),
			array('zheng',  -10764),
			array('zhi',    -10587),
			array('zhong',  -10544),
			array('zhou',   -10533),
			array('zhu',    -10519),
			array('zhua',   -10331),
			array('zhuai',  -10329),
			array('zhuan',  -10328),
			array('zhuang', -10322),
			array('zhui',   -10315),
			array('zhun',   -10309),
			array('zhuo',   -10307),
			array('zi',     -10296),
			array('zong',   -10281),
			array('zou',    -10274),
			array('zu',     -10270),
			array('zuan',   -10262),
			array('zui',    -10260),
			array('zun',    -10256),
			array('zuo',    -10254),
	);
}
