You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP 8.2 Alpine 3.19中IntlDateFormatter格式化ar_AE日期缺阿拉伯数字

PHP 8.2 + Alpine 3.19下ar_AE区域IntlDateFormatter数字显示异常问题

将PHP项目从7.4升级到8.2后,在PHP 8.2 + Alpine 3.19环境中使用IntlDateFormatter格式化ar_AE区域日期时出现异常:原环境(PHP 7.4 + Alpine 3.12)会输出全阿拉伯字符(包括数字),但新环境中仅显示阿拉伯文字,数字仍为拉丁形式(如1、2022)。

已知Alpine 3.16开始ICU数据拆分,已在PHP 8.2的Dockerfile中添加icu-libs和icu-data-full,问题部分解决,但ar_AE区域的数字仍未显示为阿拉伯数字。

输出对比

PHP 7.4输出

/var/www $ php test.php
ar_AE: السبت، ١ يناير ٢٠٢٢ ١٢:٥٩:٥٩ ص توقيت وسط أوروبا الرسمي
ar_QA: السبت، ١ يناير ٢٠٢٢ ١٢:٥٩:٥٩ ص توقيت وسط أوروبا الرسمي
ar_SA: السبت، ١ يناير ٢٠٢٢ م ١٢:٥٩:٥٩ ص توقيت وسط أوروبا الرسمي

PHP 8.2输出

/var/www $ php test.php
ar_AE: السبت، 1 يناير 2022 في 12:59:59 ص توقيت وسط أوروبا الرسمي
ar_QA: السبت، ١ يناير ٢٠٢٢ في ١٢:٥٩:٥٩ ص توقيت وسط أوروبا الرسمي
ar_SA: السبت، ١ يناير ٢٠٢٢ م في ١٢:٥٩:٥٩ ص توقيت وسط أوروبا الرسمي

测试代码(test.php)

<?php

$formatter = new IntlDateFormatter(
    'ar_AE',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'Europe/Berlin'
);

echo 'ar_AE: ' . $formatter->format(new DateTime('2021-12-31 23:59:59'));
echo PHP_EOL;

$formatter = new IntlDateFormatter(
    'ar_QA',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'Europe/Berlin'
);

echo 'ar_QA: ' . $formatter->format(new DateTime('2021-12-31 23:59:59'));
echo PHP_EOL;

$formatter = new IntlDateFormatter(
    'ar_SA',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'Europe/Berlin'
);

echo 'ar_SA: ' . $formatter->format(new DateTime('2021-12-31 23:59:59'));
echo PHP_EOL;

环境配置

PHP 7.4 Dockerfile

FROM php:7.4-fpm-alpine3.12

RUN apk update \
    && apk --no-cache add \
    freetype  \
    icu \
    icu-dev

RUN docker-php-ext-install intl

USER www-data
WORKDIR /var/www

PHP 7.4 INTL版本信息

Internationalization support => enabled
ICU version => 67.1
ICU Data version => 67.1
ICU TZData version => 2019c
ICU Unicode version => 13.0

PHP 8.2 Dockerfile

FROM php:8.2-fpm-alpine3.19

RUN apk update \
    && apk --no-cache add \
    freetype  \
    icu \
    icu-dev \
    icu-libs \
    icu-data \
    icu-data-full

RUN docker-php-ext-install intl

USER www-data
WORKDIR /var/www

PHP 8.2 INTL版本信息

Internationalization support => enabled
ICU version => 74.1
ICU Data version => 74.1
ICU TZData version => 2023c
ICU Unicode version => 15.1

已尝试的额外操作

安装了以下字体及相关包,但无效果:

font-arabic-misc \
font-noto-arabic \
musl-locales \
fontconfig \
ttf-dejavu \
font-noto font-noto-extra font-arabic-misc \
font-misc-cyrillic font-mutt-misc font-screen-cyrillic font-winitzki-cyrillic font-cronyx-cyrillic \
font-noto-armenian font-noto-cherokee font-noto-devanagari font-noto-ethiopic font-noto-georgian \
font-noto-hebrew font-noto-lao font-noto-malayalam font-noto-tamil font-noto-thaana font-noto-thai \
freetype ttf-droid ttf-freefont ttf-liberation freetype-dev

问题

为何在PHP 8.2 Alpine 3.19中ar_AE区域仍显示非阿拉伯数字?是遗漏了依赖,还是这属于正确输出需要调整PHPUnit测试?


内容的提问来源于stack exchange,提问作者user23441883

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:03:25