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($pathor (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(`%^(?:
                                [x09x0Ax0Dx20-x7E] # ASCII
                                | [xC2-xDF][x80-xBF] # non-overlong 2-byte
                                | xE0[xA0-xBF][x80-xBF] # excluding overlongs
                                | [xE1-xECxEExEF][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);
}
?>