October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix NowOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk5 min

Pourquoi PHP voit `C.UTF-8` alors que Docker définit `fr_FR.UTF-8` ?

Une variable LANG ne crée pas une locale et ne prouve pas que PHP l’utilise. Vérifiez les données de locale du conteneur, l’environnement du processus et chaque catégorie PHP concernée.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Parce que définir LANG=fr_FR.UTF-8 dans un Dockerfile ne crée pas cette locale et ne garantit pas que PHP l’a appliquée. Il faut vérifier séparément la variable reçue par le processus, la présence de la locale dans l’image et la valeur effective de la catégorie PHP concernée. Sur une image officielle Debian, C.UTF-8 est disponible par défaut, tandis que fr_FR.UTF-8 peut nécessiter une génération explicite.

Pourquoi la variable du Dockerfile ne suffit-elle pas ?

La directive Docker ENV définit une variable dans l’environnement de l’image et des conteneurs lancés depuis celle-ci. Elle ne génère pas pour autant les données système correspondant à cette locale. La documentation Docker sur ENV décrit la persistance de variables d’environnement, pas la création de locales.

As an Amazon Associate I earn from qualifying purchases.

Il y a donc trois états distincts à contrôler : la valeur de LANG reçue par le processus PHP, les locales effectivement installées dans l’image, et la locale que PHP a définie pour chaque catégorie. Une valeur fr_FR.UTF-8 dans l’environnement ne prouve ni que cette locale existe dans le conteneur, ni que PHP l’a appliquée.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Quelle différence entre C.UTF-8 et fr_FR.UTF-8 ?

C.UTF-8 conserve le comportement de la locale C tout en prenant en charge l’encodage UTF-8. Cela ne lui donne pas les conventions régionales françaises. fr_FR.UTF-8 désigne une locale française : selon la catégorie concernée, elle peut donc modifier la classification des caractères, les formats de date ou le séparateur décimal. La documentation Debian de C.UTF-8 précise son rapport avec la locale C et UTF-8.

Comment vérifier la locale dans le conteneur et dans PHP ?

  1. Identifiez l’image de base. La disponibilité et la génération des locales dépendent du système. Les indications ci-dessous pour locale-gen concernent Debian ; ne les appliquez pas sans vérification à une image Alpine ou à une autre base. La documentation PHP de setlocale indique également que la prise en charge des locales dépend de la plateforme.

  2. Sur Debian, contrôlez les locales installées. Dans le conteneur concerné, exécutez locale -a. La page de l’image officielle Debian sur Docker Hub indique que C, C.UTF-8 et POSIX sont présentes par défaut et explique que d’autres locales peuvent être installées et générées. Si fr_FR.UTF-8 manque, vérifiez que le paquet locales est installé et que la locale souhaitée est sélectionnée dans /etc/locale.gen.

  3. Générez la locale sélectionnée. Sur Debian, après avoir configuré /etc/locale.gen, lancez locale-gen, puis contrôlez de nouveau le résultat avec locale -a. La page de manuel Debian de locale-gen explique qu’il compile les locales sélectionnées à partir des modèles disponibles. Le système peut afficher les noms sous une forme normalisée.

    Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  4. Vérifiez l’environnement réellement reçu par PHP. Dans le même conteneur et le même chemin de lancement que le processus concerné, relevez LANG, LC_ALL et les variables LC_*. Une configuration de service ou de lancement peut différer de l’environnement observé dans un shell interactif.

  5. Initialisez la locale dans PHP et examinez le résultat. Pour demander à PHP de lire les noms de locale depuis l’environnement, appelez setlocale(LC_ALL, ''), ou ciblez uniquement la catégorie nécessaire. La fonction renvoie la locale définie ou false si la locale demandée n’existe pas ou n’est pas prise en charge. Contrôlez ensuite la catégorie visée, par exemple avec setlocale(LC_CTYPE, 0), plutôt que de vous fier uniquement à une valeur globale.

PHP documente que, lorsque le nom de locale transmis à setlocale est une chaîne vide ou null, la fonction cherche les noms dans les variables d’environnement correspondant aux catégories, ou dans LANG. La variable fournit donc une valeur candidate ; c’est l’appel à setlocale et son résultat qui permettent de vérifier l’état PHP.

Quelle catégorie faut-il changer ?

Choisissez la catégorie selon l’effet recherché. Modifier une catégorie ne configure pas automatiquement les autres.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • LC_CTYPE concerne notamment la classification et la conversion des caractères.

  • LC_TIME concerne les formats de date et d’heure.

  • LC_NUMERIC concerne les conventions numériques, notamment le séparateur décimal.

  • LC_ALL demande à PHP de définir l’ensemble des catégories. Utilisez-le si c’est bien le résultat recherché ; sinon, ciblez la catégorie pertinente.

Un contrôle par catégorie est utile parce qu’un état global peut masquer une différence : pour confirmer le comportement des caractères, examinez LC_CTYPE, même si vous avez appelé setlocale(LC_ALL, '').

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Comment interpréter un retour inattendu ?

Que sait-on du cas où PHP restait en C.UTF-8 ?

Un article décrivant ce problème rapporte que LC_CTYPE restait en C.UTF-8 malgré une configuration française dans le Dockerfile et attribue le comportement à l’absence d’initialisation explicite de la locale dans le processus PHP. La documentation PHP confirme le rôle de setlocale, mais l’article ne fournit pas ici le Dockerfile, la version de PHP, l’image de base ni le SAPI. Cette explication décrit donc le cas rapporté ; elle ne permet pas d’identifier le déclencheur d’un autre déploiement.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.