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
);
}
?>