`
student_lp
  • 浏览: 437264 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

php工具类之【String处理类】

阅读更多
class String {
    /**
     +----------------------------------------------------------
     * 生成UUID 单机使用
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @return string
     +----------------------------------------------------------
     */
    static public function uuid() {
        $charid = md5(uniqid(mt_rand(), true));
        $hyphen = chr(45);// "-"
        $uuid = chr(123)// "{"
               .substr($charid, 0, 8).$hyphen
               .substr($charid, 8, 4).$hyphen
               .substr($charid,12, 4).$hyphen
               .substr($charid,16, 4).$hyphen
               .substr($charid,20,12)
               .chr(125);// "}"
        return $uuid;
   }

	/**
	 +----------------------------------------------------------
	 * 生成Guid主键
	 +----------------------------------------------------------
	 * @return Boolean
	 +----------------------------------------------------------
	 */
	static public function keyGen() {
		return str_replace('-','',substr(String::uuid(),1,-1));
	}

	/**
	 +----------------------------------------------------------
	 * 检查字符串是否是UTF8编码
	 +----------------------------------------------------------
	 * @param string $string 字符串
	 +----------------------------------------------------------
	 * @return Boolean
	 +----------------------------------------------------------
	 */
	static public function isUtf8($str) {
		$c=0; $b=0;
		$bits=0;
		$len=strlen($str);
		for($i=0; $i<$len; $i++){
			$c=ord($str[$i]);
			if($c > 128){
				if(($c >= 254)) return false;
				elseif($c >= 252) $bits=6;
				elseif($c >= 248) $bits=5;
				elseif($c >= 240) $bits=4;
				elseif($c >= 224) $bits=3;
				elseif($c >= 192) $bits=2;
				else return false;
				if(($i+$bits) > $len) return false;
				while($bits > 1){
					$i++;
					$b=ord($str[$i]);
					if($b < 128 || $b > 191) return false;
					$bits--;
				}
			}
		}
		return true;
	}

	/**
	 +----------------------------------------------------------
	 * 字符串截取,支持中文和其他编码
	 +----------------------------------------------------------
	 * @static
	 * @access public
	 +----------------------------------------------------------
	 * @param string $str 需要转换的字符串
	 * @param string $start 开始位置
	 * @param string $length 截取长度
	 * @param string $charset 编码格式
	 * @param string $suffix 截断显示字符
	 +----------------------------------------------------------
	 * @return string
	 +----------------------------------------------------------
	 */
	static public function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) {
        if(function_exists("mb_substr"))
            $slice = mb_substr($str, $start, $length, $charset);
        elseif(function_exists('iconv_substr')) {
            $slice = iconv_substr($str,$start,$length,$charset);
        }else{
            $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])/";
            preg_match_all($re[$charset], $str, $match);
            $slice = join("",array_slice($match[0], $start, $length));
        }
        return $suffix ? $slice.'...' : $slice;
    }

	/**
	 +----------------------------------------------------------
	 * 产生随机字串,可用来自动生成密码
	 * 默认长度6位 字母和数字混合 支持中文
	 +----------------------------------------------------------
	 * @param string $len 长度
	 * @param string $type 字串类型
	 * 0 字母 1 数字 其它 混合
	 * @param string $addChars 额外字符
	 +----------------------------------------------------------
	 * @return string
	 +----------------------------------------------------------
	 */
	static public function randString($len=6,$type='',$addChars='') {
		$str ='';
		switch($type) {
			case 0:
				$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.$addChars;
				break;
			case 1:
				$chars= str_repeat('0123456789',3);
				break;
			case 2:
				$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.$addChars;
				break;
			case 3:
				$chars='abcdefghijklmnopqrstuvwxyz'.$addChars;
				break;
			case 4:
				$chars = "们阿斯顿发生地方阿斯蒂芬阿斯蒂芬ASF地V字形陈V手势地方过水电费v鬼地方乖宝宝双方都 山东饭馆山东饭馆撒地方v睡的地方改水电费撒地方感受到法国地神风怪盗搞活动大发光火地方馆地方高大发光火的反光板的广播台地方馆别DVB大小分割撒地方 啥地方告诉对方释放掉豆沙方糕撒地方干点啥风格白癜风锅煽豆腐山东饭馆时代复分高速钢微软消费税大发光火好的锈扫毕璃宝芯爷鉴秘净蒋钙肩腾枯抛轨堂拌爸循诱祝励肯酒绳穷塘燥泡袋朗喂铝软渠颗惯贸粪综墙趋彼届墨碍启逆卸航衣孙龄岭骗休借".$addChars;
				break;
			default :
				// 默认去掉了容易混淆的字符oOLl和数字01,要添加请使用addChars参数
				$chars='ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'.$addChars;
				break;
		}
		if($len>10 ) {//位数过长重复字符串一定次数
			$chars= $type==1? str_repeat($chars,$len) : str_repeat($chars,5);
		}
		if($type!=4) {
			$chars   =   str_shuffle($chars);
			$str     =   substr($chars,0,$len);
		}else{
			// 中文随机字
			for($i=0;$i<$len;$i++){
			  $str.= self::msubstr($chars, floor(mt_rand(0,mb_strlen($chars,'utf-8')-1)),1,'utf-8',false);
			}
		}
		return $str;
	}

	/**
	 +----------------------------------------------------------
	 * 生成一定数量的随机数,并且不重复
	 +----------------------------------------------------------
	 * @param integer $number 数量
	 * @param string $len 长度
	 * @param string $type 字串类型
	 * 0 字母 1 数字 其它 混合
	 +----------------------------------------------------------
	 * @return string
	 +----------------------------------------------------------
	 */
	static public function buildCountRand ($number,$length=4,$mode=1) {
			if($mode==1 && $length<strlen($number) ) {
				//不足以生成一定数量的不重复数字
				return false;
			}
			$rand   =  array();
			for($i=0; $i<$number; $i++) {
				$rand[] =   self::randString($length,$mode);
			}
			$unqiue = array_unique($rand);
			if(count($unqiue)==count($rand)) {
				return $rand;
			}
			$count   = count($rand)-count($unqiue);
			for($i=0; $i<$count*3; $i++) {
				$rand[] =   self::randString($length,$mode);
			}
			$rand = array_slice(array_unique ($rand),0,$number);
			return $rand;
	}

	/**
	 +----------------------------------------------------------
	 *  带格式生成随机字符 支持批量生成
	 *  但可能存在重复
	 +----------------------------------------------------------
	 * @param string $format 字符格式
	 *     # 表示数字 * 表示字母和数字 $ 表示字母
	 * @param integer $number 生成数量
	 +----------------------------------------------------------
	 * @return string | array
	 +----------------------------------------------------------
	 */
	static public function buildFormatRand($format,$number=1) {
		$str  =  array();
		$length =  strlen($format);
		for($j=0; $j<$number; $j++) {
			$strtemp   = '';
			for($i=0; $i<$length; $i++) {
				$char = substr($format,$i,1);
				switch($char){
					case "*"://字母和数字混合
						$strtemp   .= String::randString(1);
						break;
					case "#"://数字
						$strtemp  .= String::randString(1,1);
						break;
					case "$"://大写字母
						$strtemp .=  String::randString(1,2);
						break;
					default://其他格式均不转换
						$strtemp .=   $char;
						break;
			   }
			}
			$str[] = $strtemp;
		}

		return $number==1? $strtemp : $str ;
	}

	/**
	 +----------------------------------------------------------
	 * 获取一定范围内的随机数字 位数不足补零
	 +----------------------------------------------------------
	 * @param integer $min 最小值
	 * @param integer $max 最大值
	 +----------------------------------------------------------
	 * @return string
	 +----------------------------------------------------------
	 */
	static public function randNumber ($min, $max) {
		return sprintf("%0".strlen($max)."d", mt_rand($min,$max));
	}

    // 自动转换字符集 支持数组转换
    static public function autoCharset($string, $from='gbk', $to='utf-8') {
        $from = strtoupper($from) == 'UTF8' ? 'utf-8' : $from;
        $to = strtoupper($to) == 'UTF8' ? 'utf-8' : $to;
        if (strtoupper($from) === strtoupper($to) || empty($string) || (is_scalar($string) && !is_string($string))) {
            //如果编码相同或者非字符串标量则不转换
            return $string;
        }
        if (is_string($string)) {
            if (function_exists('mb_convert_encoding')) {
                return mb_convert_encoding($string, $to, $from);
            } elseif (function_exists('iconv')) {
                return iconv($from, $to, $string);
            } else {
                return $string;
            }
        } elseif (is_array($string)) {
            foreach ($string as $key => $val) {
                $_key = self::autoCharset($key, $from, $to);
                $string[$_key] = self::autoCharset($val, $from, $to);
                if ($key != $_key)
                    unset($string[$key]);
            }
            return $string;
        }
        else {
            return $string;
        }
    }
}

 

分享到:
评论

相关推荐

    防止sql注入工具类l

    这个工具类可能提供了自动转义或参数化查询的功能,比如`mysqli_real_escape_string`函数,或者更高级的ORM框架如Doctrine,它们内置了防止SQL注入的安全机制。 4. **最小权限原则**:数据库连接账户应具有执行其...

    修改phprpc源码以支持集合类的string类型的转换

    在这个主题中,“修改phprpc源码以支持集合类的string类型的转换”涉及到对Phprpc框架的源代码进行定制化改造,以适应处理集合类中的字符串类型转换需求。在IT行业中,这样的改造通常是出于特定业务场景的需求,比如...

    PHP常用工具类大全附全部代码下载

    根据给定文件的信息,这里将会详细说明关于“PHP常用工具类大全附全部代码下载”的知识点。 1. 助手类概述 在PHP中,助手类通常被设计为提供一系列的便利方法,以供开发者在项目中快速调用。它不是一个具体的功能类...

    PHP常用工具类方法(珍藏版收集)

    以上只是PHP工具类方法的一小部分,实际的工具类可能包括更多的功能,如数据库操作、加密解密、HTTP请求、缓存处理等。在实际开发中,根据项目需求,可以创建自己的工具类库,方便快速调用和复用代码,提高开发效率...

    PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】

    在实际开发中,还可以考虑对工具类进行进一步的优化和扩展,比如加入事务处理、错误处理机制、日志记录等,以提高工具类的健壮性和易用性。 总之,通过阅读和理解本文档中提到的工具类的定义和用法,开发者可以更好...

    PHP多功能工具箱源码_it工具箱源码_itselfy1d_工具箱源码php_工具箱源码php_php加密_

    3. **字符串处理**:工具箱可能包含字符串的拼接、截取、替换、编码转换等操作,可以参考PHP的str_replace、substr、mb_string等函数。 4. **加密解密**:对于PHP加密,常见的有md5、sha1、bcrypt、openssl等,工具...

    PHP常用类集合

    - `String`类:虽然PHP没有内置的String类,但我们可以自定义一个,包含如`length()`, `substring()`, `contains()`等方法。 - PHP内置函数:`strlen()`, `substr()`, `strpos()`, `str_replace()`等都是处理字符...

    PHP常用mysql类

    在IT行业中,PHP是一种广泛使用的服务器端脚本语言,尤其在...总的来说,这个自定义PHP MySQL类是提高开发效率和代码质量的重要工具。在实际应用中,确保对类进行充分测试,以确保其在各种情况下都能正确无误地工作。

    php 常用类

    5. **日期时间处理类**:例如,`DateTime`类可以提供获取当前时间、格式化日期、计算时间差等功能,使得日期时间的处理更加灵活。 6. **安全防护类**:这类类库通常用于预防XSS、SQL注入等安全问题,例如`Sanitize`...

    php7 benchmark 工具

    这类工具通常包括一组预定义的测试用例,涵盖了各种常见的PHP操作,如循环、函数调用、数组操作等。例如,一个简单的基准测试可能包含对比PHP5与PHP7执行相同循环次数所需的时间。 常见的PHP Benchmark工具有: 1....

    php封装的pdo数据库操作工具类与用法示例

    本文实例讲述了php封装的pdo数据库操作工具类与用法。分享给大家供大家参考,具体如下: &lt;?php header(Content-Type:text/html;charset=utf-8); class PdoMysql{ public static $config = array();//设置连接...

    基于PHP的工具包 一些操作封装.zip

    【标题】:“基于PHP的工具包 一些操作封装.zip” 提供了PHP编程中的实用工具类和函数集合,旨在简化常见的编程任务,提高开发效率。这个压缩包可能包含了一系列已经预封装好的函数或类,方便开发者在自己的项目中...

    MySQL增删改查工具PHP类.zip.zip

    MySQL增删改查工具PHP类是一个实用的编程资源,它为开发者提供了便捷的方式来管理MySQL数据库中的数据。这个工具集成了数据库连接、数据编码处理、以及基本的SQL操作(包括INSERT、DELETE、UPDATE和SELECT),使得在...

    php编写的中文繁简转换类

    1. PHP字符串处理和编码转换函数,如`iconv`和`mb_string`。 2. 类的定义和方法封装,用于组织和重用代码。 3. 字库或编码映射表的使用,用于查找和替换对应的繁简字。 4. 测试用例的编写,以确保转换功能的正确性。...

    PHP封装cURL工具类与应用示例

    本文实例讲述了PHP封装cURL工具类。分享给大家供大家参考,具体如下: CurlUtils工具类: &lt;?php /** * cURL请求工具类 */ class CurlUtils { private $ch;//curl资源对象 /** * 构造方法 * @param string ...

    PHP中simplexml_load_string函数使用说明

    总的来说,`simplexml_load_string`是PHP处理XML数据的一个强大工具,通过将XML字符串转换为`SimpleXMLElement`对象,我们可以方便地进行各种操作。在实际开发中,需要注意其对象的特性和遍历方式,以避免误解输出...

    360提供的php防sql注入代码修改类

    总的来说,"360提供的php防sql注入代码修改类"是一个实用的工具,旨在帮助开发者提高PHP应用的安全性,减少SQL注入和HTTP跨站攻击的风险。通过理解并应用这个类,我们可以更好地保护我们的网站和用户数据。在实践中...

    php截取汉字类

    ### PHP截取汉字类知识点详解 #### 一、概述 在Web开发中,尤其是中文网站的开发过程中,经常需要对中文字符串进行截取处理。...对于需要处理大量中文数据的应用程序来说,这些工具是非常有价值的。

    Algorithm-laravel-string-similarities.zip

    在IT领域,算法是至关重要的组成部分,它们是解决复杂问题的有效工具。在“Algorithm-laravel-string-similarities.zip”这个压缩包中,我们关注的是一个特定的算法应用,即字符串相似度计算。这个项目可能是一个 ...

Global site tag (gtag.js) - Google Analytics