字符串截取函数
我们经常对于长文本需要截取其长度,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();
PHP常用函数(非自带函数)
最新推荐文章于 2021-05-27 19:45:20 发布