]+src=[\'"](.*?)[\'"][^>]+>/i', rawurldecode($img), $matches); if ($match) { return $matches[1]; } return ''; } } if (!function_exists('lang_i18n')) { /** * 获取国际化语言包 * 根据请求页面path获取分组语言对应值 * * @param string $name 语言包名称 * @param array $vars 替换变量 * @param string $lang 语言标识 * @return string */ function lang_i18n(string $name, array $vars = [], string $lang = ''): string { if (is_null($name)) { return ''; } $path = strtolower(request()->controller() . '/' . request()->action()); $lang_key = "{$path}.{$name}"; if (!Lang::has($lang_key, $lang)) { return Lang::get($name, $vars, $lang); } return Lang::get($lang_key, $vars, $lang); } } if (!function_exists('date_format_i18n')) { /** * 格式化日期时间为指定语言 * @param int|string $datetime 要格式化的日期时间字符串 * @param string $lang 语言标识 * @param bool $keep_time 是否保留时间 * @return string */ function date_format_i18n(int|string|null $datetime, string $lang = '', bool $keep_time = false): string { // 处理语言标识,若未提供则使用当前语言设置,并转换为小写 $lang = $lang ?: Lang::getLangSet(); $lang = strtolower($lang); // 处理日期时间输入 if (is_numeric($datetime)) { // 若输入为数字,直接作为时间戳处理 $timestamp = (int)$datetime; } elseif (is_string($datetime)) { // 尝试将字符串转换为时间戳 $timestamp = strtotime($datetime); if ($timestamp === false) { return ''; } } else { return ''; } // 根据$datetime传值决定格式 $date_parts = []; if (is_numeric($datetime)) { $date_str = date('Y-m-d', $timestamp); $date_parts = explode('-', $date_str); } elseif (is_string($datetime)) { if (preg_match('/^\d{4}$/', $datetime)) { $date_parts = [$datetime]; } elseif (preg_match('/^\d{4}-\d{1,2}$/', $datetime)) { $date_parts = explode('-', $datetime); } elseif (preg_match('/^\d{4}-\d{1,2}-\d{1,2}(.{1,9})?$/', $datetime)) { $date_parts = explode('-', $datetime); } } // 定义默认格式 $fmt = ''; // 根据语言和日期部分数量设置日期格式 $format = [ 'zh-cn' => [0 => '', 1 => 'Y', 2 => 'Y-m', 3 => 'Y-m-d'], 'en-us' => [0 => '', 1 => 'Y', 2 => 'F Y', 3 => 'F j, Y'], 'default' => [0 => '', 1 => 'Y', 2 => 'Y-m', 3 => 'Y-m-d'] ]; $fmt = $format[$lang][count($date_parts)] ?? $format['default'][count($date_parts)]; // 若需要保留时间 if ($keep_time) { if ($lang === 'en-us') { $fmt .= ', g:i A'; } else { $fmt .= ' H:i:s'; } } return date($fmt, $timestamp); } } if (!function_exists('get_platform')) { /** * 获取平台 * @return string */ function get_platform(): string { $detect = new \Detection\MobileDetect(); $platform = 'pc'; if ($detect->isMobile() || $detect->isTablet()) { $platform = 'mobile'; } else { // 在非移动端环境,根据配置规则判断是否要显示移动端 $view_cfg = $view_cfg = [ 'rule' => env('VIEW_TPL.RULE', 'query'), 'query' => [ 'name' => env('VIEW_TPL.RULE_QUERY_NAME', 'mtpl'), 'value' => env('VIEW_TPL.RULE_QUERY_VALUE', '1'), ], 'domain' => [ 'scheme' => env('VIEW_TPL.RULE_DOMAIN_SCHEME', ['http']), 'host' => env('VIEW_TPL.RULE_DOMAIN_HOST'), ], ]; if ($view_cfg['rule'] == 'query') { $name = $view_cfg['query']['name']; $value = $view_cfg['query']['value']; if (request()->get($name) == $value) { $platform = 'mobile'; } } elseif ($view_cfg['rule'] == 'domain') { $scheme = $view_cfg['domain']['scheme']; $host = $view_cfg['domain']['host']; if (in_array(request()->scheme(), $scheme) && $host == request()->host()) { $platform = 'mobile'; } } } return $platform; } } if (!function_exists('highlight_keywords')) { /** * 高亮关键词 * @param string $item * @param string $keywords * @param array $class * @return string */ function highlight_keywords(string $text, string $keywords, array $class=[]): string { return preg_replace_callback('/' . preg_quote($keywords, '/') . '+/i', function($match) use($text, $class) { if (empty($match)) { return $text; } return '' . $match[0] . ''; }, $text); } }