
该错误源于 php 的国际化扩展(intl)未启用,导致 symfony console 组件在处理字符串长度计算时无法调用 `normalizer` 类;只需安装并启用 `php-intl` 扩展即可修复。
在 Laravel 项目中执行 composer install 或 composer update 时出现 Fatal error: Class 'Normalizer' not found,根本原因并非代码问题,而是当前 PHP 环境缺少 intl 扩展——该扩展提供了 Normalizer、Collator、Locale 等关键国际化类,而 Symfony Console(特别是 ProgressBar 和 Helper 组件)在格式化控制台输出时依赖 Normalizer::normalize() 来正确处理 Unicode 字符串宽度,尤其在含 emoji、中文或重音符号的进度条文本中至关重要。
✅ 解决方案:安装并启用 php-intl
根据你的系统环境,执行对应命令:
▪ Ubuntu/Debian(推荐,适配 PHP 7.4+)
# 查看当前 PHP 版本(确认主版本号) php -v # 安装 intl 扩展(以 PHP 7.4 为例) sudo apt update sudo apt install php7.4-intl # 若使用 PHP 8.x,请替换为: # sudo apt install php8.1-intl # 或 php8.2-intl / php8.3-intl
▪ CentOS/RHEL / AlmaLinux(使用 dnf/yum)
# PHP 7.4+ sudo dnf install php-intl # 或旧版 yum(如 CentOS 7) sudo yum install php-intl
▪ macOS(通过 Homebrew + PHP)
# 若使用 brew 安装的 PHP(如 php@8.2) brew install php@8.2-intl # 并确保 extension_dir 和 extension=intl.so 已写入 php.ini
▪ 验证是否生效
安装完成后,重启 Web 服务器(如 Apache/Nginx)及 PHP-FPM(如使用),然后运行:
php -m | grep intl
# 应输出:intl
php -r "var_dump(class_exists('Normalizer'));"
# 应输出:bool(true)⚠️ 注意事项: 不要仅修改 php.ini 添加 extension=intl,若未实际安装扩展包,PHP 启动会报 Failed loading extension 错误; 多版本 PHP 共存时(如 php7.4, php8.1),务必为当前 CLI 使用的 PHP 版本安装对应 php*-intl 包(可用 which php 和 php -i | grep "Loaded Configuration File" 确认); Docker 用户请在 Dockerfile 中添加 RUN apt-get install -y php${PHP_VERSION}-intl 并重建镜像。
完成上述步骤后,再次执行 composer install 即可正常进行,Symfony 进度条与 Laravel 安装流程将不再因 Normalizer 缺失而中断。此扩展不仅是 Composer 的依赖,更是 Laravel 本地化(Lang, trans())、日期格式化(Carbon::locale())及 JSON 响应标准化等功能的基础支撑。
立即学习“PHP免费学习笔记(深入)”;











