PHP常用函数(非自带函数)

字符串截取函数

我们经常对于长文本需要截取其长度,substr函数往往截取之后会有乱码;以下函数截取字符串很好用,来自于phpcms系统。


/**
 * 字符截取 支持UTF8/GBK
 * @param $string
 * @param $length
 * @param $dot
 */
function str_cut($string, $length, $dot = '...') {
	$strlen = strlen($string);
	if($strlen <= $length) return $string;
	$string = str_replace(array(' ',' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), array('∵',' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $string);
	$strcut = '';
	if(strtolower(CHARSET) == 'utf-8') {
		$length = intval($length-strlen($dot)-$length/3);
		$n = $tn = $noc = 0;
		while($n < strlen($string)) {
			$t = ord($string[$n]);
			if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
				$tn = 1; $n++; $noc++;
			} elseif(194 <= $t && $t <= 223) {
				$tn = 2; $n += 2; $noc += 2;
			} elseif(224 <= $t && $t <= 239) {
				$tn = 3; $n += 3; $noc += 2;
			} elseif(240 <= $t && $t <= 247) {
				$tn = 4; $n += 4; $noc += 2;
			} elseif(248 <= $t && $t <= 251) {
				$tn = 5; $n += 5; $noc += 2;
			} elseif($t == 252 || $t == 253) {
				$tn = 6; $n += 6; $noc += 2;
			} else {
				$n++;
			}
			if($noc >= $length) {
				break;
			}
		}
		if($noc > $length) {
			$n -= $tn;
		}
		$strcut = substr($string, 0, $n);
		$strcut = str_replace(array('∵', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), $strcut);
	} else {
		$dotlen = strlen($dot);
		$maxi = $length - $dotlen - 1;
		$current_str = '';
		$search_arr = array('&',' ', '"', "'", '“', '”', '—', '<', '>', '·', '…','∵');
		$replace_arr = array('&',' ', '"', ''', '“', '”', '—', '<', '>', '·', '…',' ');
		$search_flip = array_flip($search_arr);
		for ($i = 0; $i < $maxi; $i++) {
			$current_str = ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
			if (in_array($current_str, $search_arr)) {
				$key = $search_flip[$current_str];
				$current_str = str_replace($search_arr[$key], $replace_arr[$key], $current_str);
			}
			$strcut .= $current_str;
		}
	}
	return $strcut.$dot;
}


区分站点访问设备

当然很多是js来做的,但是当需要在后端判断也是可能的。

function is_mobile() {
    $useragent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
    $useragent_commentsblock = preg_match('|\(.*?\)|', $useragent, $matches) > 0 ? $matches[0] : '';

    $mobile_os_list = array('Google Wireless Transcoder', 'Windows CE', 'WindowsCE', 'Symbian', 'Android', 'armv6l', 'armv5', 'Mobile', 'CentOS', 'mowser', 'AvantGo', 'Opera Mobi', 'J2ME/MIDP', 'Smartphone', 'Go.Web', 'Palm', 'iPAQ');
    $mobile_token_list = array('Profile/MIDP', 'Configuration/CLDC-', '160×160', '176×220', '240×240', '240×320', '320×240', 'UP.Browser', 'UP.Link', 'SymbianOS', 'PalmOS', 'PocketPC', 'SonyEricsson', 'Nokia', 'BlackBerry', 'Vodafone', 'BenQ', 'Novarra-Vision', 'Iris', 'NetFront', 'HTC_', 'Xda_', 'SAMSUNG-SGH', 'Wapaka', 'DoCoMo', 'iPhone', 'iPod');

    foreach ($mobile_os_list as $mobile_os){
        if (false !== strpos($useragent_commentsblock, $mobile_os)) {
            return true;
        }
    }

    foreach ($mobile_token_list as $mobile_token){
        if (false !== strpos($useragent, $mobile_token)) {
            return true;
        }
    }

    return false;
}


验证码生成

一个简单存粹的验证码生成,没有缓存机制,可以拿来临时用用。

需要一个字体文件,可以自己找一个。

<?php

class Imagecode
{
    private $width;
    private $height;
    private $counts;
    private $distrubcode;
    private $fonturl;
    private $session;

    function __construct($width = 120, $height = 30, $counts = 5, $distrubcode = "1235467890qwertyuipkjhgfdaszxcvbnm", $fonturl = '/tmp/zangti.ttf') {
        $this->width = $width;
        $this->height = $height;
        $this->counts = $counts;
        $this->distrubcode = $distrubcode;
        $this->fonturl = $fonturl;
        $this->session = $this->sessioncode();
        session_start();
        $_SESSION['code'] = $this->session;
    }

    function imageout() {
        $im = $this->createimagesource();
        $this->setbackgroundcolor($im);
        $this->set_code($im);
        $this->setdistrubecode($im);
        ImageGIF($im);
        ImageDestroy($im);
    }

    private function createimagesource() {
        return imagecreate($this->width, $this->height);
    }

    private function setbackgroundcolor($im) {
        $bgcolor = ImageColorAllocate($im, rand(200, 255), rand(200, 255), rand(200, 255));//±³¾°ÑÕÉ«
        imagefill($im, 0, 0, $bgcolor);
    }

    private function setdistrubecode($im) {
        $count_h = $this->height;
        $cou = floor($count_h * 2);
        for ($i = 0; $i < $cou; $i++) {
            $x = rand(0, $this->width);
            $y = rand(0, $this->height);
            $jiaodu = rand(0, 360);
            $fontsize = rand(8, 15);
            $fonturl = $this->fonturl;
            $originalcode = $this->distrubcode;
            $countdistrub = strlen($originalcode);
            $dscode = $originalcode[rand(0, $countdistrub - 1)];
            $color = ImageColorAllocate($im, rand(40, 140), rand(40, 140), rand(40, 140));
            imagettftext($im, $fontsize, $jiaodu, $x, $y, $color, $fonturl, $dscode);
        }
    }

    private function set_code($im) {
        $width = $this->width;
        $counts = $this->counts;
        $height = $this->height;
        $scode = $this->session;
        $y = floor($height / 2) + floor($height / 4);
        $fontsize = rand(30, 35);
        $fonturl = '/tmp/zangti.ttf';//$this->fonturl;

        $counts = $this->counts;
        for ($i = 0; $i < $counts; $i++) {
            $char = $scode[$i];
            $x = floor($width / $counts) * $i + 8;
            $jiaodu = rand(-20, 30);
            $color = ImageColorAllocate($im, rand(0, 50), rand(50, 100), rand(100, 140));
            imagettftext($im, $fontsize, $jiaodu, $x, $y, $color, $fonturl, $char);
        }


    }

    private function sessioncode() {
        $originalcode = $this->distrubcode;
        $countdistrub = strlen($originalcode);
        $_dscode = "";
        $counts = $this->counts;
        for ($j = 0; $j < $counts; $j++) {
            $dscode = $originalcode[rand(0, $countdistrub - 1)];
            $_dscode .= $dscode;
        }
        return $_dscode;

    }
}

error_reporting(E_ALL);
Header("Content-type: image/GIF");
$imagecode = new Imagecode(160, 50);
$imagecode->imageout();



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值