1、PHP字符串截取,支持gb2312和UTF-8编码。
看了网上很多这样的函数但用起来效果很不理想,所以自己写了一个,初步测试gb2312和UTF8都支持的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<?php /** +----------------------------------------------------------
* 功能:字符串截取指定长度
* leo.li hengqin2008@qq.com
+----------------------------------------------------------
* @param string $string 待截取的字符串
* @param int $len 截取的长度
* @param int $start 从第几个字符开始截取
* @param boolean $suffix 是否在截取后的字符串后跟上省略号
+----------------------------------------------------------
* @return string 返回截取后的字符串
+----------------------------------------------------------
*/
function cutStr( $string , $len =100, $start =0, $suffix =1) {
$strlen = mb_strlen( $string );
while ( $strlen ) {
$array [] = mb_substr( $string , 0, 1, "utf8" );
$string = mb_substr( $string , 1, $strlen , "utf8" );
$strlen = mb_strlen( $string );
}
$end = $len + $start ;
$str = '' ;
for ( $i = $start ; $i < $end ; $i ++) {
$str .= $array [ $i ];
}
return $suffix == 1 ? $str . "..." : $str ;
} ?> |
2、PHP检测一个目录是否存在,不存在创建它,存在返回true。
函数一:代码简洁明了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?php /** +----------------------------------------------------------
* 功能:检测一个目录是否存在,不存在则创建它
* leo.li hengqin2008@qq.com
+----------------------------------------------------------
* @param string $path 待检测的目录
+----------------------------------------------------------
* @return boolean
+----------------------------------------------------------
*/
function makeDir( $path ) {
return is_dir ( $path ) or (makeDir(dirname( $path )) and @ mkdir ( $path , 0777));
} // $myDir = makeDir("./html/phpahz/tk/");//这里带点和不带点不一样 ?>
|
函数二:代码相对较多。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
<?php /** * 检查目标文件夹是否存在,如果不存在则自动创建该目录
*
* @access public
* @param string folder 目录路径。不能使用相对于网站根目录的URL
*
* @return bool
*/
function make_dir( $folder ) {
$reval = false;
if (! file_exists ( $folder )) {
/* 如果目录不存在则尝试创建该目录 */
@umask(0);
/* 将目录路径拆分成数组 */
preg_match_all( '/([^\/]*)\/?/i' , $folder , $atmp );
/* 如果第一个字符为/则当作物理路径处理 */
$base = ( $atmp [0][0] == '/' ) ? '/' : '' ;
/* 遍历包含路径信息的数组 */
foreach ( $atmp [1] AS $val ) {
if ( '' != $val ) {
$base .= $val ;
if ( '..' == $val || '.' == $val ) {
/* 如果目录为.或者..则直接补/继续下一个循环 */
$base .= '/' ;
continue ;
}
} else {
continue ;
}
$base .= '/' ;
if (! file_exists ( $base )) {
/* 尝试创建目录,如果创建失败则继续循环 */
if (@ mkdir (rtrim( $base , '/' ), 0777)) {
@ chmod ( $base , 0777);
$reval = true;
}
}
}
} else {
/* 路径已经存在。返回该路径是不是一个目录 */
$reval = is_dir ( $folder );
}
clearstatcache();
return $reval ;
} // $myDir = make_dir("./html/phpahz/tk/"); //这里带点和不带点不一样 ?> |
3、将中英文字符串转换成数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?php /** +----------------------------------------------------------
* 功能:将中英文字符串转换成数组
* leo.li hengqin2008@qq.com
+----------------------------------------------------------
* @param string $path 需要转换成数组的字符串
+----------------------------------------------------------
* @return array
+----------------------------------------------------------
*/
function get_mb_substr( $string ) {
$strlen = mb_strlen( $string );
while ( $strlen ) {
$array [] = mb_substr( $string , 0, 1, "utf8" );
$string = mb_substr( $string , 1, $strlen , "utf8" );
$strlen = mb_strlen( $string );
}
return $array ;
} ?> |
4、计算两个日期相差 年 月 日
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<?php /** +----------------------------------------------------------
* 功能:计算两个日期相差 年 月 日
* leo.li hengqin2008@qq.com
+----------------------------------------------------------
* @param date $date1 起始日期
* @param date $date2 截止日期日期
+----------------------------------------------------------
* @return array
+----------------------------------------------------------
*/
function DiffDate( $date1 , $date2 ) {
if ( strtotime ( $date1 ) > strtotime ( $date2 )) {
$ymd = $date2 ;
$date2 = $date1 ;
$date1 = $ymd ;
}
list( $y1 , $m1 , $d1 ) = explode ( '-' , $date1 );
list( $y2 , $m2 , $d2 ) = explode ( '-' , $date2 );
$y = $m = $d = $_m = 0;
$math = ( $y2 - $y1 ) * 12 + $m2 - $m1 ;
$y = round ( $math / 12);
$m = intval ( $math % 12);
$d = ( mktime (0, 0, 0, $m2 , $d2 , $y2 ) - mktime (0, 0, 0, $m2 , $d1 , $y2 )) / 86400;
if ( $d < 0) {
$m -= 1;
$d += date ( 'j' , mktime (0, 0, 0, $m2 , 0, $y2 ));
}
$m < 0 && $y -= 1;
return array ( $y , $m , $d );
} ?> |
5、检测字符串是否是utf8,不是则转码为utf8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<?php /** +----------------------------------------------------------
* 功能:检测字符串是否是utf8,不是则转码为utf8
* leo.li hengqin2008@qq.com
+----------------------------------------------------------
* @param string $string 起始日期
+----------------------------------------------------------
* @return string 返回UTF8的字符串
+----------------------------------------------------------
*/
function checkUtf8( $string ) {
if ( $string == '' )
return ;
$check = preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string );
return $check == 1 ? $string : iconv( 'gb2312' , 'utf-8' , $string );
} ?> |
本文转自 gutaotao1989 51CTO博客,原文链接:http://blog.51cto.com/taoyouth/1410858