Voici un petit script qui pourra vous être utile. Il permet de convertir des fichiers encodés en ISO-8859-1, vers de l’UTF-8. Pratique pour certains problèmes d’encodages de caractères.
Pré-requis
Assurez-vous que le paquet « recode » est installé :
sudo apt-get install recode
Mise en place du script
Copier le script à la racine de votre projet (ex : « /var/www/monsiteweb/ »), et n’oubliez pas de lui donner le droit d’exécution :
sudo chmod +x ./recodeifneeded
Utilisation du script
Une fois les étapes précédentes effectuées, restez sur le dossier racine de votre projet.
Pour tous les fichiers :
find . -name "*.*" -exec ./recodeifneeded utf-8 {} \;
Pour les fichiers PHP :
find . -name "*.php" -exec ./recodeifneeded utf-8 {} \;
Pour les fichiers phtml :
find . -name "*.phtml" -exec ./recodeifneeded utf-8 {} \;
Le script ne va prendre que les fichiers encodés en ISO-8859-1 pour les convertir en UTF-8.
Il ne convertira pas les fichiers convertis en US-ASCII étant donné que c’est un sous-ensemble de l’encodage UTF-8.
Il ignorera aussi les fichiers liés au SVN, et les fichiers n’étant pas encodés en ISO-8859-1
Le script
Voici la dernière partie et la plus important, le script !
Il est simpliste et pas forcément optimisé, mais pour ce dont j’avais besoin il fait l’affaire, à vous de le modifier à votre guise !
#!/bin/bash # Find the current encoding of the file encoding=$(file -i "$2" | sed "s/.*charset=\(.*\)$/\1/") # Some file does not return charset, so we chek if the : character is in the string # If it is, we set the encoding to undefined other=$(echo "${encoding}" | grep ":") if [ ! "${other}" == "" ] then encoding='undefined' fi # Check if it's svn file svn=$(echo "$2" | grep ".svn") if [ ! "$1" == "${encoding}" ] && [ "${svn}" == "" ] then # If file is in us-ascii, it's a subelement of utf-8, so we don't need to recode if [ ! ${encoding} == 'us-ascii' ] || [ ! $1 == 'utf-8' ] then # Get only iso-8859-1 files, remove this condition if you want if [ $encoding == 'iso-8859-1' ] then # Encodings differ, we have to encode echo "recoding from ${encoding} to $1 file : $2" recode ${encoding}..$1 $2 fi fi fi
Super, je vais tester çà. Merci Max 🙂
Je m’en suis servi hier sur un projet, et quand j’ai commité j’ai vu les diffs avec les accents qui étaient mal encodés.