Files
xk-api-yii/common/helpers/StringHelper.php
2024-09-19 11:32:39 +08:00

101 lines
3.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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 . '**';
}
}
}