修复国家设置,允许不设置任何国家,不做判断

This commit is contained in:
root
2026-06-20 04:09:37 +08:00
parent 6b3b99b0f1
commit 24ff3f9657
11 changed files with 188 additions and 23 deletions
+56 -5
View File
@@ -6,18 +6,56 @@ require_once __DIR__ . '/CountryCodeNormalizer.php';
class CountryAllowlist
{
/**
* SHOW_SITE_COUNTRY 是否已配置(非空允许列表 = 开启国家条件)
*
* @param string|null $config 默认读取 SHOW_SITE_COUNTRY
*/
public static function isEnabled($config = null)
{
if ($config === null) {
$config = defined('SHOW_SITE_COUNTRY') ? SHOW_SITE_COUNTRY : '';
}
return self::parse($config) !== [];
}
/**
* 保存前规范化用户输入:兼容中文逗号/分号、顿号、全角空格及多余空白。
*
* @param string $config
*/
public static function normalizeInput($config)
{
$config = trim((string) $config);
if ($config === '') {
return '';
}
// 全角空格、不间断空格
$config = preg_replace('/[\x{3000}\x{00A0}]/u', ' ', $config);
// 常见误输入分隔符统一为英文逗号
$config = str_replace(['', ';', '', '、'], ',', $config);
// 去掉分隔符两侧空白,合并连续逗号
$config = preg_replace('/\s*,\s*/', ',', $config);
$config = preg_replace('/,+/', ',', $config);
return trim($config, " \t\n\r,");
}
/**
* @param string $config 逗号分隔国家码,如 US,GB,CA
* @return string[]
*/
public static function parse($config)
{
$config = trim((string) $config);
$config = self::normalizeInput($config);
if ($config === '') {
return [];
}
// 支持英文逗号、中文逗号、分号分隔
$parts = preg_split('/\s*[,;]\s*/u', $config);
$parts = explode(',', $config);
$out = [];
foreach ($parts as $part) {
$part = trim($part);
@@ -33,10 +71,23 @@ class CountryAllowlist
}
/**
* 保存配置前规范化国家列表字符串(dashboard 写入用
* 读取并规范化 SHOW_SITE_COUNTRY(大写 ISO2,逗号分隔
*
* @param string|null $config 默认 SHOW_SITE_COUNTRY
*/
public static function resolvedConfig($config = null)
{
if ($config === null) {
$config = defined('SHOW_SITE_COUNTRY') ? SHOW_SITE_COUNTRY : '';
}
return self::formatForConfig($config);
}
/**
* 保存配置前规范化国家列表字符串(dashboard 写入用,输出大写如 US,GB)
*
* @param string $config
* @return string 如 BR,CN
* @return string 如 US,GB
*/
public static function formatForConfig($config)
{