diff --git a/app/Module/Base.php b/app/Module/Base.php index 6ce1f238d..c12af01fd 100755 --- a/app/Module/Base.php +++ b/app/Module/Base.php @@ -8,6 +8,7 @@ use App\Models\Tmp; use Cache; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Config; +use Overtrue\Pinyin\Pinyin; use Redirect; use Request; use Storage; @@ -2797,36 +2798,15 @@ class Base if (empty($str)) { return ''; } - $fchar = ord($str[0]); - if ($fchar >= ord('A') && $fchar <= ord('z')) return strtoupper($str[0]); - $s1 = iconv('UTF-8', 'gb2312', $str); - $s2 = iconv('gb2312', 'UTF-8', $s1); - $s = $s2 == $str ? $s1 : $str; - $asc = ord($s[0]) * 256 + ord($s[1]) - 65536; - if ($asc >= -20319 && $asc <= -20284) return 'A'; - if ($asc >= -20283 && $asc <= -19776) return 'B'; - if ($asc >= -19775 && $asc <= -19219) return 'C'; - if ($asc >= -19218 && $asc <= -18711) return 'D'; - if ($asc >= -18710 && $asc <= -18527) return 'E'; - if ($asc >= -18526 && $asc <= -18240) return 'F'; - if ($asc >= -18239 && $asc <= -17923) return 'G'; - if ($asc >= -17922 && $asc <= -17418) return 'H'; - if ($asc >= -17417 && $asc <= -16475) return 'J'; - if ($asc >= -16474 && $asc <= -16213) return 'K'; - if ($asc >= -16212 && $asc <= -15641) return 'L'; - if ($asc >= -15640 && $asc <= -15166) return 'M'; - if ($asc >= -15165 && $asc <= -14923) return 'N'; - if ($asc >= -14922 && $asc <= -14915) return 'O'; - if ($asc >= -14914 && $asc <= -14631) return 'P'; - if ($asc >= -14630 && $asc <= -14150) return 'Q'; - if ($asc >= -14149 && $asc <= -14091) return 'R'; - if ($asc >= -14090 && $asc <= -13319) return 'S'; - if ($asc >= -13318 && $asc <= -12839) return 'T'; - if ($asc >= -12838 && $asc <= -12557) return 'W'; - if ($asc >= -12556 && $asc <= -11848) return 'X'; - if ($asc >= -11847 && $asc <= -11056) return 'Y'; - if ($asc >= -11055 && $asc <= -10247) return 'Z'; - return '#'; + $first = mb_substr($str, 0, 1); + if (preg_match("/^\d$/", $first)) { + return '#'; + } + if (!preg_match("/^[a-zA-Z]$/", $first)) { + $pinyin = new Pinyin(); + $first = $pinyin->abbr($first, '', PINYIN_NAME); + } + return $first ? strtoupper($first) : '#'; } /** diff --git a/composer.json b/composer.json index 7f807d363..96ab9435b 100644 --- a/composer.json +++ b/composer.json @@ -25,6 +25,7 @@ "madnest/madzipper": "^v1.1.0", "mews/captcha": "^3.2.6", "orangehill/iseed": "^3.0.1", + "overtrue/pinyin": "^4.0", "predis/predis": "^1.1.7" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 4b2a15037..a478e476d 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7cf09e78a30054fd005c1dac6a92ec6e", + "content-hash": "816640b1d415b136ebd4e280bdab73b7", "packages": [ { "name": "brick/math", @@ -3027,6 +3027,79 @@ ], "time": "2022-03-14T06:24:13+00:00" }, + { + "name": "overtrue/pinyin", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/overtrue/pinyin.git", + "reference": "04bdb4d33d50e8fb1aa5a824064c5151c4b15dc2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/overtrue/pinyin/zipball/04bdb4d33d50e8fb1aa5a824064c5151c4b15dc2", + "reference": "04bdb4d33d50e8fb1aa5a824064c5151c4b15dc2", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "brainmaestro/composer-git-hooks": "^2.7", + "friendsofphp/php-cs-fixer": "^2.16", + "phpunit/phpunit": "~8.0" + }, + "type": "library", + "extra": { + "hooks": { + "pre-commit": [ + "composer test", + "composer fix-style" + ], + "pre-push": [ + "composer test", + "composer check-style" + ] + } + }, + "autoload": { + "files": [ + "src/const.php" + ], + "psr-4": { + "Overtrue\\Pinyin\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "overtrue", + "email": "anzhengchao@gmail.com", + "homepage": "http://github.com/overtrue" + } + ], + "description": "Chinese to pinyin translator.", + "homepage": "https://github.com/overtrue/pinyin", + "keywords": [ + "Chinese", + "Pinyin", + "cn2pinyin" + ], + "support": { + "issues": "https://github.com/overtrue/pinyin/issues", + "source": "https://github.com/overtrue/pinyin/tree/4.0.8" + }, + "funding": [ + { + "url": "https://www.patreon.com/overtrue", + "type": "patreon" + } + ], + "time": "2021-07-19T03:43:32+00:00" + }, { "name": "phpoffice/phpspreadsheet", "version": "1.22.0",