Files
xk-api-yii/common/helpers/StringHelper.php

101 lines
3.3 KiB
PHP
Raw Permalink Normal View History

2024-09-19 11:32:39 +08:00
<?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 . '**';
}
}
}