101 lines
3.3 KiB
PHP
101 lines
3.3 KiB
PHP
<?php
|
||
|
||
|
||
namespace common\helpers;
|
||
|
||
/**
|
||
* StringHelper
|
||
*
|
||
*/
|
||
class StringHelper extends \yii\helpers\StringHelper{
|
||
|
||
/**
|
||
* 字符串截取,支持中文和其他编码
|
||
* @param string $str 需要转换的字符串
|
||
* @param string $start 开始位置
|
||
* @param string $length 截取长度
|
||
* @param string $charset 编码格式
|
||
* @param string $suffix 截断显示字符
|
||
* @return string
|
||
*/
|
||
public static function substr($str, $start=0, $length, $charset="utf-8", $suffix=false) {
|
||
if(function_exists("mb_substr"))
|
||
$slice = mb_substr($str, $start, $length, $charset);
|
||
elseif(function_exists('iconv_substr')) {
|
||
$slice = iconv_substr($str,$start,$length,$charset);
|
||
if(false === $slice) {
|
||
$slice = '';
|
||
}
|
||
}else{
|
||
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
|
||
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
|
||
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
|
||
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
|
||
preg_match_all($re[$charset], $str, $match);
|
||
$slice = join("",array_slice($match[0], $start, $length));
|
||
}
|
||
return $suffix ? $slice.'...' : $slice;
|
||
}
|
||
|
||
/**
|
||
* 获取随机字符串
|
||
*
|
||
* @param $length
|
||
* @param bool $numeric
|
||
* @return string
|
||
*/
|
||
public static function random($length, $numeric = false)
|
||
{
|
||
$seed = base_convert(md5(microtime() . $_SERVER['DOCUMENT_ROOT']), 16, $numeric ? 10 : 35);
|
||
$seed = $numeric ? (str_replace('0', '', $seed) . '012340567890') : ($seed . 'zZ' . strtoupper($seed));
|
||
|
||
$hash = '';
|
||
if (!$numeric) {
|
||
$hash = chr(rand(1, 26) + rand(0, 1) * 32 + 64);
|
||
$length--;
|
||
}
|
||
|
||
$max = strlen($seed) - 1;
|
||
$seed = str_split($seed);
|
||
for ($i = 0; $i < $length; $i++) {
|
||
$hash .= $seed[mt_rand(0, $max)];
|
||
}
|
||
|
||
return $hash;
|
||
}
|
||
|
||
/**
|
||
* 和谐显示
|
||
* 如:手机号13812345678变成138****5678
|
||
*
|
||
* @param $string
|
||
* @return string
|
||
*/
|
||
public static function string_hide_cut($string): string
|
||
{
|
||
$length = mb_strlen($string, 'utf-8');
|
||
if ($length == 0) {
|
||
return '';
|
||
}
|
||
if ($length == 11) {
|
||
$firstStr = mb_substr($string, 0, 3, 'utf-8');
|
||
$lastStr1 = mb_substr($string, -4, 1, 'utf-8');
|
||
$lastStr2 = mb_substr($string, -1, 1, 'utf-8');
|
||
return $firstStr . '****' . $lastStr1 . '**' . $lastStr2;
|
||
} elseif ($length < 11 && $length >= 3) {
|
||
$firstStr = mb_substr($string, 0, 1, 'utf-8');
|
||
$lastStr = mb_substr($string, -1, 1, 'utf-8');
|
||
return $firstStr . str_repeat('*', $length - 2) . $lastStr;
|
||
} elseif ($length == 2) {
|
||
$firstStr = mb_substr($string, 0, 1, 'utf-8');
|
||
return $firstStr . '*';
|
||
} elseif ($length == 1) {
|
||
return $string . '*';
|
||
} else {
|
||
$firstStr = mb_substr($string, 0, 3, 'utf-8');
|
||
$lastStr = mb_substr($string, -4, 2, 'utf-8');
|
||
return $firstStr . str_repeat('*', mb_strlen($string, 'utf-8') - 5) . $lastStr . '**';
|
||
}
|
||
}
|
||
}
|