Fork me on GitHub






Script d'encodage de fichiers par lot
Team FrXoops
Inscrit: 24/11/2008 00:42
De Argenteuil
Messages: 987
Bonjour,

Je ne sais pas trop où mettre ce post.
Voici un script pour encoder les fichiers par lots d'ISO (8859-1) en unicode (UTF8 sans Bom):
<?php 

   
#
   # encode les fichier du répertoire et sous répertoires en cours
   #
   


function encoderDossier ($dossierAEncoder)
    {
        
$dossier = @opendir ($dossierAEncoder);
        
        if(!
$dossier
        {
            print(
"erreur pour $dossierAEncoder<br>");
        }
        
        else 
        {    
            while (
$fichierAEncoder readdir ($dossier))
            {
                
$path $dossierAEncoder $fichierAEncoder;
                
                if (
$fichierAEncoder != '.' && $fichierAEncoder != '..')
                {
                    if (
is_file ($path))
                    {                        
                        
$contenu file_get_contents ($path);
                        
$fichier = @fopen ($path'w');
                        if(
$fichier)
                        {
                            
fputs ($fichierhtml_entity_decode(utf8_encode($contenu)));
                            
fclose ($fichier);
                            print(
"<b>fichier encodé : $dossierAEncoder$fichierAEncoder</b><br>");
                        }
                        else 
                        {
                            print(
"fichier impossible à ouvrir (permission refusée): $dossierAEncoder$fichierAEncoder<br>");
                        }
                    }
                    
                    elseif(
is_dir($fichierAEncoder))
                    {
                        
encoderDossier ($dossierAEncoder $fichierAEncoder .'/');
                    }
                    else 
                    {
                        print(
"erreur fichier invalide : $dossierAEncoder$fichierAEncoder<br>");
                    }
                }
            }
        
            
closedir ($dossier);
        }
    }
    
    
encoderDossier ('./');

?>>

Placez ce fichier dans le répertoire à encoder et lancez-le. Tous les fichiers contenus dans le même répertoire que le script ainsi que dans tous les sous-répertoires seront encodés.

Pour ceux qui souhaite passer de l'unicode à l'Iso (si, si ça existe!) vous devez remplacer utf8_encode($contenu) par utf8_decode($contenu).


S'il y a des développeurs qui passe par là, ce serait bien d'améliorer le script en testant si le fichier est ouvert en écriture. Si ce n'est pas le cas il faudrait changer les droits pour permettre l'encodage puis remettre les droits d'origine

Posté le : 25/10/2010 23:37
Partager Twitter Partagez cette article sur GG+
Re: Script d'encodage de fichiers par lot
Guest_
b'soir,

ça a l'air sympa pour transformer les fichiers de langue et les templates !

Merci :)

Posté le : 25/10/2010 23:44
Partager Twitter Partagez cette article sur GG+
Re: Script d'encodage de fichiers par lot
Team FrXoops
Inscrit: 24/11/2008 00:42
De Argenteuil
Messages: 987
Bonsoir,

Cela m'a été soufflé par caradoc d'aller voir ce lien:
http://www.siteduzero.com/tutoriel-3- ... u-latin1-a-l-unicode.html

Posté le : 25/10/2010 23:49
Partager Twitter Partagez cette article sur GG+
Re: Script d'encodage de fichiers par lot
Semi pro
Inscrit: 08/06/2005 17:15
De Where ?
Messages: 513
<?php
    
function encoderDossier ($dossierAEncoder)
    {
        
$dossier opendir ($dossierAEncoder);
        
        while (
$fichierAEncoder readdir ($dossier))
        {
            if (
$fichierAEncoder != '.' AND $fichierAEncoder != '..')
            {
                echo 
'    => '.$dossierAEncoder.$fichierAEncoder.'<br />';
                if (
is_file ($dossierAEncoder.$fichierAEncoder) && in_array(strtolower(pathinfo($fichierAEncoderPATHINFO_EXTENSION)), array('php''html''txt''ini')))
                {
                    
$contenu file_get_contents ($dossierAEncoder.$fichierAEncoder);
                    
$encodage mb_detect_encoding($contenu'auto');
                    if (
$encodage != 'UTF-8')
                    {
                        
$fichier fopen ($dossierAEncoder.$fichierAEncoder'w');
                        
fputs ($fichierhtml_entity_decode (utf8_encode ($contenu)));
                        
fclose ($fichier);
                        echo 
$dossierAEncoder.$fichierAEncoder.' a été encodé, il était encodé en '.$encodage.'.<br />';
                    }
                    else echo 
$dossierAEncoder.$fichierAEncoder.' n'a pas été encodé puisqu'il était déjà en utf-8.<br />';
                }
                
                elseif (
is_dir($dossierAEncoder $fichierAEncoder))
                    
encoderDossier ($dossierAEncoder $fichierAEncoder '/'); // je mets ici '/' le chemin de mon dossier à encoder
            
}
        }
        
        
closedir ($dossier);
    }
?>

Posté le : 26/10/2010 00:02
Partager Twitter Partagez cette article sur GG+
Re: Script d'encodage de fichiers par lot
Guest_
Lecture très intéressante !

La requête Citation :
ALTER TABLE `ma_table` CONVERT TO CHARACTER SET utf8
est quand même plus propre que le vieux chercher / remplacer avec notepad++

M'en vais réviser mon pdf



---
Saleté de pub :

Posté le : 26/10/2010 00:08
Partager Twitter Partagez cette article sur GG+
Re: Script d'encodage de fichiers par lot
Semi pro
Inscrit: 10/11/2004 13:40
Messages: 1659
Merci de nous faire partager tout ça, très très intéressant

Posté le : 26/10/2010 10:21

PS : Toujours faire une sauvegarde des fichiers avant de les modifier !
-------------------------------------------
http://www.aideordi.com
Partager Twitter Partagez cette article sur GG+
Re: Script d'encodage de fichiers par lot
Xoops accro
Inscrit: 20/02/2008 20:27
De Belgium
Messages: 2708
Convertir l'interclassement du tables avec phpMyAdmin et Mysql par le alter table, va probablement pas donner le résultat désirée, car les caractères effectivement stockées dans les tables ne correspond pas avec latin1 stricte mais avec Winxxxx, qui contient beaucoup plus des caractères que latin1.
Seulement les caractères latin1 vont être traduit vers UTF-8, mais autres, comme la signe euro vont rester dans leur format et montrer une �.

Si c’était si simple comme ça, on n'avait pas ce bordel ici et .

Posté le : 26/10/2010 12:05

Salutations, Gerard.
PS: Excusez mon mauvais français.
De la bonne manière de poser les questions
Partager Twitter Partagez cette article sur GG+
Re: Script d'encodage de fichiers par lot
Team FrXoops
Inscrit: 24/11/2008 00:42
De Argenteuil
Messages: 987
Bonsoir Ghia,

Citation :

Ghia a écrit :
Si c’était si simple comme ça, on n'avait pas ce bordel ... et .

Effectivement, c'est un sujet qui revient régulièrement.
Nous pourrions avoir un forum rien que pour ce sujet!
Le petit scrip permet un peu d'avancer.

Merci à caradoc d'avoir ajouter le test pour vérifier le type d'encodage du fichier.

Je ne comprends le test suivant:
if (is_file ($dossierAEncoder.$fichierAEncoder) && in_array(strtolower(pathinfo($fichierAEncoderPATHINFO_EXTENSION)), array('php''html''txt''ini')))
C'est pour éviter d'encoder les fichiers de type css, js, sql, les fichiers graphiques... C'est bien cela?

A+
Franck

Posté le : 26/10/2010 21:58
Partager Twitter Partagez cette article sur GG+
Re: Script d'encodage de fichiers par lot
Semi pro
Inscrit: 08/06/2005 17:15
De Where ?
Messages: 513
Citation :

Franck0768 a écrit :
C'est pour éviter d'encoder les fichiers de type css, js, sql, les fichiers graphiques... C'est bien cela?

Oui, ensuite à toi de voir ce que tu veux faire compléter, retirer des extensions

Posté le : 26/10/2010 22:03
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

124 Personne(s) en ligne (106 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 124 | Plus ...