Files
kiri-core/kiri-engine/Core/Str.php
T

279 lines
7.9 KiB
PHP
Raw Normal View History

2022-01-09 03:50:38 +08:00
<?php
declare(strict_types=1);
namespace Kiri\Core;
use Exception;
/**
* Class Str
2022-01-12 14:10:33 +08:00
* @package Kiri\Core
2022-01-09 03:50:38 +08:00
*/
class Str
{
2023-12-12 15:35:38 +08:00
const string STRING = 'abcdefghijklmnopqrstuvwxyz';
2022-01-09 03:50:38 +08:00
2023-12-12 15:35:38 +08:00
const string NUMBER = '01234567890';
2022-01-09 03:50:38 +08:00
/**
* @param int $length
*
* @return string
* 获取随机字符串
*/
public static function rand(int $length = 20): string
{
$string = '';
if ($length < 1) $length = 20;
$default = self::STRING . strtoupper(self::STRING) . self::NUMBER;
$default = str_split($default);
for ($i = 0; $i < $length; $i++) {
shuffle($default);
$string .= $default[array_rand($default)];
}
return $string;
}
/**
* @param int $length
*
* @return int|string 获取随机数字
* 获取随机数字
*/
public static function random(int $length = 20): int|string
{
2023-10-24 17:22:32 +08:00
$number = '';
2022-01-09 03:50:38 +08:00
$default = str_split(self::NUMBER);
if ($length < 1) $length = 1;
for ($i = 0; $i < $length; $i++) {
shuffle($default);
$number .= $default[array_rand($default)];
}
return $number;
}
/**
* @param $string
* @param $sullen
* @param bool $strip_tags
* @param string $append
*
* @return string
*/
public static function cut_str_utf8($string, $sullen, bool $strip_tags = TRUE, string $append = '...'): string
{
if ($strip_tags) {
$string = strip_tags($string);
}//去掉签标
$pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
preg_match_all($pa, $string, $t_string);
$str = "";
for ($i = 0; $i < count($t_string[0]); $i++) {
$str .= $t_string[0][$i];
//转为gbk,一个汉字长度为2
if (strlen(@iconv('utf-8', 'gbk', $str)) >= $sullen) {
if ($i != count($t_string[0]) - 1) $str .= $append;
break;
}
}
return $str;
}
/**
* @param $data
*
* @param null $callback
* @return bool
* 判断是否为json字符串
*/
public static function isJson($data, $callback = NULL): bool
{
$json = !is_null(json_decode($data)) && !is_numeric($data);
if ($json && is_callable($callback, TRUE)) {
return call_user_func($callback, $data);
}
return $json;
}
/**
* @param $data
*
* @param null $callBack
* @return bool
* 判断是否序列化字符串
*/
public static function isSerialize($data, $callBack = NULL): bool
{
2023-12-12 15:35:38 +08:00
$false = !empty($data) && unserialize($data) !== FALSE;
2022-01-09 03:50:38 +08:00
if ($false && is_callable($callBack, TRUE)) {
return call_user_func($callBack, $data);
}
return $false;
}
/**
* @param $string
* @param int $length
*
* @param string $append
* @return string
*/
public static function cut($string, int $length = 20, string $append = '...'): string
{
if (empty($string)) {
return '';
}
if ($length < 1) {
$length = 1;
}
$array = str_split($string);
if (count($array) <= $length) {
return implode('', $array);
}
$string = implode('', array_slice($array, 0, $length));
if (!empty($append)) {
$string .= $append;
}
return $string;
}
/**
* @param $str
* @param int $number
* @param string $key
*
* @return string
*/
public static function encrypt($str, int $number = 10, string $key = 'xshucai.com'): string
{
$res = [];
$add = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
2023-12-13 21:01:59 +08:00
$len = strlen($key) + 5 > strlen($add) ? strlen($add) - 5 : strlen($key);
2022-01-09 03:50:38 +08:00
if ($number < 1) $number = 10;
$array = str_split($str);
asort($array);
$str = implode('', $array);
for ($i = 0; $i < $number; $i++) {
2023-10-24 17:22:32 +08:00
$_tmp = md5($key) . md5($str) . mb_substr($add, $len, $len + 5, 'utf-8');
2022-01-09 03:50:38 +08:00
$res[] = md5($_tmp);
}
sort($res, SORT_STRING);
return hash('sha384', implode('', $res));
}
/**
* @param $file
* @param $type
* @return string
*/
public static function filename($file, $type): string
{
2023-10-24 17:22:32 +08:00
return match ($type) {
2023-12-12 15:35:38 +08:00
'image/png' => md5_file($file) . '.png',
2023-10-24 17:22:32 +08:00
'image/jpeg', 'image/jpg' => md5_file($file) . '.jpg',
2023-12-12 15:35:38 +08:00
'image/gif' => md5_file($file) . '.gif',
default => md5_file($file),
2023-10-24 17:22:32 +08:00
};
2022-01-09 03:50:38 +08:00
}
/**
* @param $endTime
* @param int|null $startTime
* @return array
* 剩余天,带分秒
*/
2025-07-14 18:12:17 +08:00
public static function timeout($endTime, ?int $startTime = NULL): array
2022-01-09 03:50:38 +08:00
{
$endTime = $endTime - (!empty($startTime) ? $startTime : time());
$day = intval($endTime / (3600 * 24));
$hours = intval(($endTime - ($day * (3600 * 24))) / 3600);
$minute = intval(($endTime - ($day * (3600 * 24) + $hours * 3600)) / 60);
$scrod = intval(($endTime - ($day * (3600 * 24) + $hours * 3600 + $minute * 60)));
return [$day, $hours, $minute, $scrod];
}
/**
* @return false|int
*/
public static function get_sy_time(): bool|int
{
$time = strtotime('+1days', strtotime(date('Y-m-d')));
return $time - time();
}
/**
* @param string $string
* @return string
*/
public static function encode(string $string): string
{
return addslashes($string);
}
/**
* @param string $string
* @return string|string[]|null
* 清除标点符号
*/
public static function clear(string $string): array|string|null
{
2023-12-13 21:01:59 +08:00
$char = '。、!?:;﹑•"…‘’“”〝〞∕¦‖— 〈〉﹞﹝「」‹›〖〗】【»«』『〕〔》《﹐¸﹕︰﹔¡¿﹖﹌﹏﹋'´ˊˋ―﹫︳︴¯_ ̄﹢﹦﹤‐­˜﹟﹩﹠﹪﹡﹨﹍﹉﹎﹊ˇ︵︶︷︸︹︿﹀︺︽︾ˉ﹁﹂﹃﹄︻︼()';
return preg_replace(["/[[:punct:]]/i", '/[' . $char . ']/u', '/ {2,}/'], '', $string);
2022-01-09 03:50:38 +08:00
}
/**
* @param int $user
* @param array $param
* @param null $requestTime
*
* @return string
* @throws Exception
*/
public static function token(int $user, array $param = [], $requestTime = NULL): string
{
$str = '';
if (!$requestTime) {
$requestTime = microtime(TRUE);
}
$_user = str_split(md5($user . md5((string)$user)));
ksort($_user);
foreach ($_user as $key => $val) {
$str .= md5(sha1($key . $val . 'www.xshucai.com'));
}
if (is_array($param)) {
foreach ($param as $key => $val) {
$str .= md5($str . sha1($key . md5($val)));
}
}
$str .= sha1(base64_encode((string)$requestTime));
$md5 = md5($str . $user);
return preg_replace('/(\w{10})(\w{3})(\w{4})(\w{9})(\w{6})/', '$1-$2-$3-$4-$5', $md5);
}
/**
* @param string $str
* @param bool $unfairest
* @return string
*/
public static function convertUnderline(string $str, bool $unfairest = TRUE): string
{
$str = ucwords(str_replace('_', ' ', $str));
$str = str_replace(' ', '', lcfirst($str));
return $unfairest ? ucfirst($str) : $str;
}
}