<?php
class Configs{
static $config=array();
/**
* 字符串截取和返回字符串的长度
* @param string $str 要截取的字符串
* @param int $start 字符串截取的初始位置,从0开始
* @param int $length 字符串截取的长度
* @param string $charset 字符串编码
* @param bool $suffix 是否添加后缀
* @param bool $strlen 是否返回字符串的长度(false不返回,true返回)
* @return int|string
*/
static public function my_substr($str, $start = 0, $length, $charset = 'utf-8', $suffix = true, $strlen = false)
{
$charset || ($charset = 'utf-8');
//正则表达式匹配编码
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
//返回字符串长度
if ($strlen) {
if (function_exists('mb_strlen')) {
$count = mb_strlen($str, $charset);
} elseif (function_exists('iconv_strlen')) {
$count = iconv_strlen($str, $charset);
} else {
preg_match_all($re[$charset], $str, $match);
$count = count($match[0]);
}
return $count;
}
//截取字符串
if (function_exists("mb_substr"))
$slice = mb_substr($str, $start, $length, $charset);
elseif (function_exists('iconv_substr')) {
$slice = iconv_substr($str, $start, $length, $charset);
if (false === $slice) {
$slice = '';
}
} else {
preg_match_all($re[$charset], $str, $match);
$slice = join("", array_slice($match[0], $start, $length));
}
//字数不满添加后缀 ...
if ($suffix) {
$count = self::my_substr($str, $start, $length, $charset, false, true);
if ($count > $length) {
return $slice . '......';
} else {
return $slice;
}
} else {
return $slice;
}
}
/**
* 返回字符串长度
* @param string $str
* @param string $charset
* @return int
*/
static public function my_strlen($str, $charset = 'utf-8')
{
$charset || ($charset = 'utf-8');
//正则表达式匹配编码
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
//返回字符串长度
if (function_exists('mb_strlen')) {
$count = mb_strlen($str, $charset);
} elseif (function_exists('iconv_strlen')) {
$count = iconv_strlen($str, $charset);
} else {
preg_match_all($re[$charset], $str, $match);
$count = count($match[0]);
}
return $count;
}
/**
* 字符串分隔
* @param string $str
* @param int $split_length
* @param string $charset
* @return array|array[]|bool|false|string[]
*/
static public function my_str_split($str, $split_length = 1, $charset = 'utf-8')
{
if (func_num_args() == 1 && strtolower($charset) === 'utf-8') {
return preg_split('/(?<!^)(?!$)/u', $str);
}
if ($split_length < 1) {
return false;
}
$len = self::my_strlen($str, $charset);
$arr = array();
for ($i = 0; $i < $len; $i += $split_length) {
$s = self::my_substr($str, $i, $split_length, $charset, false);
$arr[] = $s;
}
return $arr;
}
/**
* 把搜索词分割成多段并存储(存在 $save_arr 参数里面),左->右,字数由多到少,$save_arr 最终是一个二维数组
* @param int $length 截取的长度
* @param array $array 一维数组
* @param $save_arr
*/
static public function search_search1($length, $array, &$save_arr){
for ($i = 0, $len = count($array); $i < $len; $i++) {
($i + $length <= $len) && ($save_arr[] = array_slice($array, $i, $length));
}
}
/**
* 搜索词分割
* @param string $keyword 搜索词
* @param int|boolean $toStirng [布尔值或者 0,1]
* @return bool|array
*/
static public function search_keywords($keyword, $toStirng = 0){
if(!$keyword){return false;}
$array = self::my_str_split($keyword);
$len = count($array);
for($i = $len;$i>0;$i--){
self::search_search1($i,$array,$save_arr);
}
if($toStirng){
for($i=0,$len=count($save_arr);$i<$len;$i++){
$save_arr[$i] = join('',$save_arr[$i]);
}
}
return $save_arr ? $save_arr : false;
}
/**
* 浏览器友好的变量输出
* @param mixed $var 变量
* @param boolean $echo 是否输出 默认为True 如果为false 则返回输出字符串
* @param string $label 标签 默认为空
* @param boolean $strict 是否严谨 默认为true
* @return void|string
*/
static public function dump($var, $echo=true, $label=null, $strict=true){
$label = ($label === null) ? '' : rtrim($label) . ' ';
if (!$strict) {
if (ini_get('html_errors')) {
$output = print_r($var, true);
$output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
} else {
$output = $label . print_r($var, true);
}
} else {
ob_start();
var_dump($var);
$output = ob_get_clean();
if (!extension_loaded('xdebug')) {
$output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output);
$output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
}
}
if ($echo) {
echo($output);
return null;
}else
return $output;
}
static public function __callStatic($name, $arguments)
{
// TODO: Implement __callStatic() method.
$className = self::class;
var_dump("方法 $className::$name(".join(', ',$arguments).") 不可访问或不存在");
}
}