Intermédiaire 8 min de lecture 25 janvier 2025

iconv PHP : conversions d'encodage, erreurs fréquentes et solutions

Fichiers CSV importés, API externes, bases héritées… Les encodages se mélangent et les caractères "bizarres" apparaissent. L’extension iconv PHP sert à convertir proprement vos chaînes entre encodages (UTF‑8, ISO‑8859‑1, CP1252, etc.). Voici comment l’utiliser efficacement, ce qui casse souvent et comment sécuriser vos conversions.

Qu'est-ce que iconv en PHP ?

iconv PHP est l’interface vers la bibliothèque POSIX iconv. Elle convertit une chaîne d’un encodage source vers un encodage cible, avec des options telles que //TRANSLIT et //IGNORE pour gérer les caractères non représentables.

Voici les notions importantes pour bien utiliser iconv PHP :

1 Encodages source et cible courants

Les couples les plus utilisés en PHP pour les applis francophones :

UTF-8, ISO-8859-1 (Latin-1), Windows-1252 (CP1252), ASCII

2 Options et comportements d’iconv

Gérer les caractères non mappables et les erreurs :

//TRANSLIT, //IGNORE, "UTF-8//IGNORE", "UTF-8//TRANSLIT//IGNORE"

3 Caractères non représentables et équivalences

Ceux qui posent souvent problème lors d’une conversion :

Émojis et symboles (🚀, ✓) — absents en ISO-8859-1
Guillemets typographiques “ ” ‘ ’ — mappages CP1252 spécifiques
NBSP (U+00A0) et ZWSP (U+200B) — blancs non standards
Caractères combinants, accents décomposés (NFD)

4 Flux, BOM et frontières d’E/S

Points de friction fréquents dans iconv PHP :

BOM (U+FEFF) — à retirer en UTF-8
Flux et filtres: convert.iconv.* via stream_filter_append
Entêtes HTTP/Content-Type et meta charset
Différences OS/locale affectant //TRANSLIT

Problèmes classiques

iconv() retourne false ou lève un message d’erreur

Chaîne invalide pour l’encodage source (octets illégaux, séquences incomplètes).

Tests unitaires imprévisibles

Comportement de //TRANSLIT dépendant de la plateforme ou de la locale.

Troncatures ou pertes silencieuses

Usage de //IGNORE qui supprime des caractères importants sans alerter.

Mélange UTF‑8 et CP1252 dans les données

Apostrophes typographiques, NBSP et guillemets mal mappés dans les sorties.

Exemple de problème courant :

# Conversion UTF-8 → ISO-8859-1 avec caractères non représentables
$src = "Prix: 10€ 🚀"
$dst1 = iconv("UTF-8", "ISO-8859-1", $src) # ❌ false
$dst2 = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $src) # "Prix: 10EUR ?"
$dst3 = iconv("UTF-8", "ISO-8859-1//IGNORE", $src) # "Prix: 10€ "

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Apparition de � ou ? dans les exports après conversion
!
iconv(): Detected illegal character dans les logs PHP
!
Un CSV s’ouvre avec des caractères étranges malgré l’extension .csv
!
Le navigateur affiche mal le texte alors que le charset semble correct
!
Diff git massif après passage d’un script de conversion

Comment les détecter

Solution recommandée : Clean ASCII

Clean ASCII met en évidence les octets non-ASCII et les caractères problématiques avant une conversion avec iconv PHP. Vous repérez immédiatement ce qui risque d’échouer et vous préparez une conversion fiable.

✅ Détection automatique

Encodages mixtes, NBSP, ZWSP, BOM, caractères de contrôle

📊 Analyse complète

Codes Unicode, positions exactes, impact potentiel sur iconv

🧹 Nettoyage automatique

Remplacements sûrs pour maximiser la compatibilité d’encodage

💾 Export propre

Texte prêt pour iconv et pipelines d’import/export

Autres méthodes de détection

Affichage dans l'éditeur

Choisissez explicitement l’encodage du fichier (UTF‑8, ISO‑8859‑1, CP1252)
Activez l’affichage des blancs et caractères spéciaux pour repérer les NBSP/BOM

En ligne de commande (Unix)

# Détecter l’encodage supposé
file -i fichier.txt
# Tester une conversion et voir les erreurs
iconv -f UTF-8 -t ISO-8859-1 fichier.txt > /dev/null
# Forcer translit ou ignorer
iconv -f UTF-8 -t ISO-8859-1//TRANSLIT fichier.txt
# Inspecter les octets
hexdump -C fichier.txt

En code

JavaScript

new TextDecoder("utf-8", {fatal:true}).decode(new Uint8Array(bytes))

Python

[c for c in s if ord(c) > 255] # non représentables en Latin-1

Excel / Google Sheets

UNICODE(MID(cellule;position;1))

Nettoyer et prévenir

🚀 Solution rapide avec Clean ASCII

Avant d’appeler iconv PHP, inspectez et corrigez vos textes avec Clean ASCII pour limiter les erreurs et pertes silencieuses.

Détection automatique
Nettoyage intelligent
Export prêt pour conversion

Méthodes techniques avancées

🔧 Normaliser

Appliquez Unicode NFC/NFKC (ext/intl Normalizer) avant conversion
Retirez les BOM UTF‑8 inutiles en début de fichier
Uniformisez les fins de ligne (dos2unix, .gitattributes)

🧹 Filtrer

Détectez l’encodage (mb_detect_encoding) avant d’appeler iconv
N’utilisez //IGNORE qu’en dernier recours, logguez les pertes
Remappez les caractères CP1252 (guillemets, NBSP) vers leurs équivalents

⚙️ Automatiser

Hooks pre-commit exécutant iconv à blanc pour détecter les erreurs
Sanitization des entrées (API, formulaires, CSV) avec encodage explicite
Vérifications CI pour refuser des conversions qui retournent false

Checklist rapide

default_charset=UTF-8 dans php.ini et en-têtes HTTP cohérents
Fins de ligne uniformes via gitattributes
Éditeur configuré pour afficher BOM, blancs et encodage du fichier
Détection d’encodage avant conversion (mb_detect_encoding)
Tests qui échouent si iconv retourne false ou supprime des caractères
Documentation équipe sur encodages, //TRANSLIT et //IGNORE

Conclusion

iconv PHP est un outil fiable pour convertir vos textes entre encodages, à condition de contrôler vos données en entrée et vos options.

Standardisez l’encodage dès l’arrivée des données, normalisez, surveillez les pertes et vous éliminerez l’essentiel des erreurs de conversion.

Vérifiez votre texte avant iconv PHP

Utilisez notre outil pour identifier les caractères problématiques et préparer une conversion sans surprise.

Analyser mon encodage