Convhtml : un utilitaire de conversion pour fichiers html

Description

On peut créer ou modifier le fichier html d'une page web avec le Bloc-note, Wordpad ou un autre traitement de texte. Cela ne pose plus de problème pour les visiteurs français. Mais pour être vu, avec un affichage correct, quand on utilise Internet Explorer ou un autre afficheur en version américaine ou d'un autre pays étranger il faut convertir les caractères spéciaux. Ceci est fastidieux avec un traitement de texte. Convhtml effectue automatiquement les conversions de 26 caractères spéciaux pour tous les fichiers html contenus dans le dossier où on en met une copie. Ainsi, on maitrise bien les conversions faites. Il est rapide et systématique.

Source / Exemple :


#include <ctime>
#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
#include <windows.h>
int main() {
    WIN32_FIND_DATA File;
    HANDLE hSearch;
    std::cout << std::endl;
    hSearch=FindFirstFile("*.*", &File);           // début de la recherche de fichiers
    if(hSearch == INVALID_HANDLE_VALUE) {
        std::cout << "Il n'y a aucun fichier !" << std::endl << std::endl;       //  ??
        system("pause");
        return -1;
    }
    do {                                      // pour chaque fichier du dossier courant
        char buf[133], *p;
        BOOL ok;
        int nc;
        strcpy(buf, File.cFileName);
        nc = strlen(buf);
        while((p=strchr(buf, '.')) != NULL) strcpy(buf, p+1);  // buf : type du fichier 
        ok=false;
        if(strcmp(buf, "htm") ==0) {ok=true; nc=nc-4;}
        if(strcmp(buf, "html")==0) {ok=true; nc=nc-5;}
        if(ok && nc > 0) {
            std::cout << "Traitement de : " << File.cFileName << std::endl;
            std::ifstream input(File.cFileName);            // traitement de ce fichier
            if(input) {
                std::string fichout;
                std::ostringstream tmpflx;
                tmpflx << File.cFileName << "_tmp" << time(0);    // fichier temporaire
                fichout = tmpflx.str();                           // à nom unique
                std::ofstream output(fichout.c_str());
                if(output) {
                    std::string::size_type i0, i1;
                    std::string li;                // li : ligne lue puis ligne traitée
                    while(std::getline(input, li)) {  // volontairement on ne convertit
                        do {                          // pas les 4 caractères : & " < >
                            ok=true;
                            i0=std::string::npos;
                            i1=li.find('€'); if(i1!=i0) {li.replace(i1,1,"&euroc;");  ok=false;}
                            i1=li.find('œ'); if(i1!=i0) {li.replace(i1,1,"&oelig;");  ok=false;}
                            i1=li.find('©'); if(i1!=i0) {li.replace(i1,1,"©");   ok=false;}
                            i1=li.find('°'); if(i1!=i0) {li.replace(i1,1,"°");    ok=false;}
                            i1=li.find('Ç'); if(i1!=i0) {li.replace(i1,1,"Ç"); ok=false;}
                            i1=li.find('È'); if(i1!=i0) {li.replace(i1,1,"È"); ok=false;}
                            i1=li.find('É'); if(i1!=i0) {li.replace(i1,1,"É"); ok=false;}
                            i1=li.find('×'); if(i1!=i0) {li.replace(i1,1,"×");  ok=false;}
                            i1=li.find('à'); if(i1!=i0) {li.replace(i1,1,"à"); ok=false;}
                            i1=li.find('â'); if(i1!=i0) {li.replace(i1,1,"â");  ok=false;}
                            i1=li.find('ä'); if(i1!=i0) {li.replace(i1,1,"ä");   ok=false;}
                            i1=li.find('æ'); if(i1!=i0) {li.replace(i1,1,"æ");  ok=false;}
                            i1=li.find('ç'); if(i1!=i0) {li.replace(i1,1,"ç"); ok=false;}
                            i1=li.find('è'); if(i1!=i0) {li.replace(i1,1,"è"); ok=false;}
                            i1=li.find('é'); if(i1!=i0) {li.replace(i1,1,"é"); ok=false;}
                            i1=li.find('ê'); if(i1!=i0) {li.replace(i1,1,"ê");  ok=false;}
                            i1=li.find('ë'); if(i1!=i0) {li.replace(i1,1,"ë");   ok=false;}
                            i1=li.find('î'); if(i1!=i0) {li.replace(i1,1,"î");  ok=false;}
                            i1=li.find('ï'); if(i1!=i0) {li.replace(i1,1,"ï");   ok=false;}
                            i1=li.find('ñ'); if(i1!=i0) {li.replace(i1,1,"ñ"); ok=false;}
                            i1=li.find('ô'); if(i1!=i0) {li.replace(i1,1,"ô");  ok=false;}
                            i1=li.find('ö'); if(i1!=i0) {li.replace(i1,1,"ö");   ok=false;}
                            i1=li.find('÷'); if(i1!=i0) {li.replace(i1,1,"÷"); ok=false;}
                            i1=li.find('ù'); if(i1!=i0) {li.replace(i1,1,"ù"); ok=false;}
                            i1=li.find('û'); if(i1!=i0) {li.replace(i1,1,"û");  ok=false;}
                            i1=li.find('ü'); if(i1!=i0) {li.replace(i1,1,"ü");   ok=false;}
                        }while(!ok);
                        output << li + "\n";
                    }
                }
                output.close();
                input.close();
                remove(File.cFileName);                     // fin du fichier à traiter
                rename(fichout.c_str(), File.cFileName);      // nouveau fichier traité
            }
        }
    }while(FindNextFile(hSearch, &File));
    FindClose(hSearch);                              // fin de la recherche de fichiers
    std::cout << std::endl << std::endl;
    std::cout << "C'est fini !";
    std::cout << std::endl << std::endl;
    system("pause");
    return 0;
}

Conclusion :


Pour l'utiliser il suffit de mettre une copie du fichier convhtml.exe dans le dossier à traiter, puis de le lancer et enfin de l'effacer. C'est tout ! Il reste ensuite à envoyer les fichiers chez l'hébergeur.

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.