几个简单又实用的PHP函数

生成随机字符串

/**
 * 生成随机字符串,可以自己扩展
 * 若想唯一,只需在开头加上用户id
 * $type可以为:空(大写字母小写字母数字),upper(只生成大写字母),lower(只生成小写字母),number(只生成数字)
 * $len为长度,定义字符串长度
 */
function _random($type, $len = 0)
{
    $new = '';
    $string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // 数据池

    if (empty($type)) {
        for ($i = 0; $i < $len; $i++) {
            $new .= $string[mt_rand(0, 61)];
        }
        return $new;
    }

    if ($type == 'upper') {
        for ($i = 0; $i < $len; $i++) {
            $new .= $string[mt_rand(36, 61)];
        }
        return $new;
    }

    if ($type == 'lower') {
        for ($i = 0; $i < $len; $i++) {
            $new .= $string[mt_rand(10, 35)];
        }
        return $new;
    }

    if ($type == 'number') {
        for ($i = 0; $i < $len; $i++) {
            $new .= $string[mt_rand(0, 9)];
        }
        return $new;
    }

}

计算该月有几天

function getdaysInmonth($month, $year)
{
    $days = '';
    if ($month == 1 || $month == 3 || $month == 5 || $month == 7 || $month == 8 || $month == 10 || $month == 12) {
        $days = 31;
    } else if ($month == 4 || $month == 6 || $month == 9 || $month == 11) {
        $days = 30;
    } else if ($month == 2) {
        if (isLeapyear($year)) {
            $days = 29;
        } else {
            $days = 28;
        }
    }
    return ($days);
}

判断是否为润年

function isLeapyear($year)
{
    if ((($year % 4) == 0) && (($year % 100) != 0) || (($year % 400) == 0)) {
        return (true);
    } else {
        return (false);
    }
}

生成订单号

function auto_order($ord = 0)
{
    //自动生成订单号  传入参数为0 或者1   0为本地  1为线上订单
    if ($ord == 0) {
        $str = '00' . time() . rand(1000, 9999); //00 本地订单
    } else {
        $str = '99' . time() . rand(1000, 9999);  //11 线上订单
    }
    return $str;
}

function auto_new_order($ord = 0)
{
    srand(time());
    //自动生成订单号  传入参数为0 或者1   0为本地  1为线上订单
    if ($ord == 0) {
        $str = '00' . time() . mt_rand(100000, 999999); //00 本地订单
    } else {
        $str = '11' . time() . mt_rand(100000, 999999);  //11 线上订单
    }
    return $str;
}

检测是否为UTF8编码

function is_utf8($string)
{
    return 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);
}

处理json字符中的特殊字符

function getJsonToArr($result, $return_array = true)
{
    $tempArr = NULL;
    $result = preg_replace('/([^\\\])(":)(\d{9,})(,")/i', '${1}${2}"${3}"${4}', $result); //taobao bug,number >2^32
    $tempArr = json_decode($result, $return_array);
    if ($tempArr == NULL) {
        $patterns = array('/,+\s*\}/', '/,+\s*\]/', '/"\s+|\s+"/', '/\n|\r|\t/', '/\\\/', '/ss+/');
        $replacements = array('}', ']', '"', ' ', '', ' ');
        $result = preg_replace($patterns, $replacements, $result);
        $tempArr = json_decode($result, $return_array);
    }

    return $tempArr;
}

非法字符过滤函数

function has_unsafeword($str)
{
    $regex = "/\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\+|\{|\}|\:|\<|\>|\?|\[|\]|\.|\/|\;|\'|\`|\=|\\\|\|/";
    return preg_replace($regex, "", $str);
}

去空格,以及字符添加斜杠

function _trim(&$value)
{
    return addslashes(trim($value));
}

多维数组转字符串

/**
 * 多维数组转字符串
 *
 * @Title    (多维数组转字符串)
 * @Params  $arr    array   多维数组
 * @return  $str    string  字符串
 *
 */
function arrayToString($arr)
{
    if (is_array($arr)) {
        $str = implode(',', array_map('arrayToString', $arr));
        return $str;
    }
    return $arr;
}

将多维数组转为一维数组

/**
 * 多维数组变成一维数组
 *
 * @Title    (多维数组变成一维数组)
 * @Params  $array          array   多维数组
 * @return  $result_array   array  一维数组
 *
 */
function multi2array($array)
{
    static $result_array = array();
    foreach ($array as $key => $val) {
        if (is_array($val)) {
            multi2array($val);
        } else {
            array_push($result_array, $val);
        }
    }
    return $result_array;
}

判断是PC端还是wap端访问

/**
 * 判断是PC端还是wap端访问
 * @return type判断手机移动设备访问
 */
function isMobile()
{
    // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
    if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) {
        return true;
    }
    // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
    if (isset ($_SERVER['HTTP_VIA'])) {
        // 找不到为flase,否则为true
        return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
    }
    // 脑残法,判断手机发送的客户端标志,兼容性有待提高
    if (isset ($_SERVER['HTTP_USER_AGENT'])) {
        $clientkeywords = array('nokia',
            'sony',
            'ericsson',
            'mot',
            'samsung',
            'htc',
            'sgh',
            'lg',
            'sharp',
            'sie-',
            'philips',
            'panasonic',
            'alcatel',
            'lenovo',
            'iphone',
            'ipod',
            'blackberry',
            'meizu',
            'android',
            'netfront',
            'symbian',
            'ucweb',
            'windowsce',
            'palm',
            'operamini',
            'operamobi',
            'openwave',
            'nexusone',
            'cldc',
            'midp',
            'wap',
            'mobile'
        );
        // 从HTTP_USER_AGENT中查找手机浏览器的关键字
        if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
            return true;
        }
    }
    // 协议法,因为有可能不准确,放到最后判断
    if (isset ($_SERVER['HTTP_ACCEPT'])) {
        // 如果只支持wml并且不支持html那一定是移动设备
        // 如果支持wml和html但是wml在html之前则是移动设备
        if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
            return true;
        }
    }
    return false;
}

判断当前设备类型

//判断是否为安卓手机
function isAndroid()
{
    if (isset($_SERVER['HTTP_USER_AGENT'])) {
        $agent = strtolower($_SERVER['HTTP_USER_AGENT']);
        if (strpos($agent, 'android') !== false)
            return true;
    }
    return false;
}

//判断是否为iphone或者ipad
function isIos()
{
    if (isset($_SERVER['HTTP_USER_AGENT'])) {
        $agent = strtolower($_SERVER['HTTP_USER_AGENT']);
        if (strpos($agent, 'iphone') || strpos($agent, 'ipad'))
            return true;
    }
    return false;
}

//判断是否为微信内置浏览器打开
function isWechet()
{
    if (isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) {
        return true;
    }
    return false;
}

//整合到一起,判断当前设备,1:安卓;2:IOS;3:微信;0:未知
function isDevice()
{
    if ($_SERVER['HTTP_USER_AGENT']) {
        $agent = strtolower($_SERVER['HTTP_USER_AGENT']);
        if (strpos($agent, 'micromessenger') !== false)
            return 3;
        elseif (strpos($agent, 'iphone') || strpos($agent, 'ipad'))
            return 2;
        else
            return 1;
    }
    return 0;
}

日期转换成几分钟前

function formatTime($date)
{
    $timer = strtotime($date);
    $diff = $_SERVER['REQUEST_TIME'] - $timer;
    $day = floor($diff / 86400);
    $free = $diff % 86400;
    if ($day > 0) {
        if (15 < $day && $day < 30) {
            return "半个月前";
        } elseif (30 <= $day && $day < 90) {
            return "1个月前";
        } elseif (90 <= $day && $day < 187) {
            return "3个月前";
        } elseif (187 <= $day && $day < 365) {
            return "半年前";
        } elseif (365 <= $day) {
            return "1年前";
        } else {
            return $day . "天前";
        }
    } else {
        if ($free > 0) {
            $hour = floor($free / 3600);
            $free = $free % 3600;
            if ($hour > 0) {
                return $hour . "小时前";
            } else {
                if ($free > 0) {
                    $min = floor($free / 60);
                    $free = $free % 60;
                    if ($min > 0) {
                        return $min . "分钟前";
                    } else {
                        if ($free > 0) {
                            return $free . "秒前";
                        } else {
                            return '刚刚';
                        }
                    }
                } else {
                    return '刚刚';
                }
            }
        } else {
            return '刚刚';
        }
    }
}

截取长度

function getSubString($rawString, $length = '100', $etc = '...', $isStripTag = true)
{
    $rawString = str_replace('_baidu_page_break_tag_', '', $rawString);
    $result = '';
    if ($isStripTag)
        $string = html_entity_decode(trim(strip_tags($rawString)), ENT_QUOTES, 'UTF-8');
    else
        $string = trim($rawString);
    $strlen = strlen($string);
    for ($i = 0; (($i < $strlen) && ($length > 0)); $i++) {
        if ($number = strpos(str_pad(decbin(ord(substr($string, $i, 1))), 8, '0', STR_PAD_LEFT), '0')) {
            if ($length < 1.0) {
                break;
            }
            $result .= substr($string, $i, $number);
            $length -= 1.0;
            $i += $number - 1;
        } else {
            $result .= substr($string, $i, 1);
            $length -= 0.5;
        }
    }
    if ($isStripTag)
        $result = htmlspecialchars($result, ENT_QUOTES, 'UTF-8');

    if ($i < $strlen) {
        $result .= $etc;
    }
    return $result;
}

utf-8和gb2312自动转化

/**
 * utf-8和gb2312自动转化
 * @param unknown $string
 * @param string $outEncoding
 * @return unknown|string
 */
function safeEncoding($string, $outEncoding = 'UTF-8')
{
    $encoding = "UTF-8";
    for ($i = 0; $i < strlen($string); $i++) {
        if (ord($string{$i}) < 128)
            continue;

        if ((ord($string{$i}) & 224) == 224) {
            // 第一个字节判断通过
            $char = $string{++$i};
            if ((ord($char) & 128) == 128) {
                // 第二个字节判断通过
                $char = $string{++$i};
                if ((ord($char) & 128) == 128) {
                    $encoding = "UTF-8";
                    break;
                }
            }
        }
        if ((ord($string{$i}) & 192) == 192) {
            // 第一个字节判断通过
            $char = $string{++$i};
            if ((ord($char) & 128) == 128) {
                // 第二个字节判断通过
                $encoding = "GB2312";
                break;
            }
        }
    }

    if (strtoupper($encoding) == strtoupper($outEncoding))
        return $string;
    else
        return @iconv($encoding, $outEncoding, $string);
}

对内容中的关键词添加链接

/**
 *对内容中的关键词添加链接
 *只处理第一次出现的关键词,对已有链接的关键不会再加链接,支持中英文
 *$content:string 原字符串
 *$keyword:string  关键词
 *$link:string 链接
 */
function yang_keyword_link($content, $keyword, $link)
{
    //排除图片中的关键词
    $content = preg_replace('|(<img[^>]*?)(' . $keyword . ')([^>]*?>)|U', '$1%&&&&&%$3', $content);
    $regEx = '/(?!((<.*?)|(<a.*?)))(' . $keyword . ')(?!(([^<>]*?)>)|([^>]*?<\/a>))/si';
    $url = '<a href="' . $link . '" target="_blank" class="content_guanjianci">' . $keyword . '</a>';
    $content = preg_replace($regEx, $url, $content, 1);
    //还原图片中的关键词
    $content = str_replace('%&&&&&%', $keyword, $content);
    return $content;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值