Problème d’accent suite passage à PHP5.6

En cours de toilettage de mon site FUNIX, j’ai supprimé la section réseau qui était vraiment très obsolète et je n’ai vraiment plus le temps de la mettre à jour et de la maintenir, elle est encore accessible néanmoins via la carte du site. J’ai toiletté également ma section UNIX qui elle est encore pleinement d’actualité, il faut dire que globalement l’administration d’un système a assez peu évolué en plusieurs décennies, on retrouve les mêmes commandes. C’est surtout la partie environnement graphique qui a le plus évolué.

J’ai souhaité rajouter le flux RSS de mon blog sur la page d’accueil. On trouve sur le net du code PHP à intégrer dans le code HTML de la page. Cela donne cela :

<?php
                try{
                if(!@$fluxrss=simplexml_load_file('http://olivier.hoarau.org/?feed=rss2')){ throw new Exception('Flux introuvable');}

                if(empty($fluxrss->channel->title) && empty($fluxrss->channel->description) &&empty($fluxrss->channel->item->title)) throw new Exception('Flux invalide');

                $i=0;
                $nb_affichage = 4;

                
                foreach($fluxrss->channel->item as $item){
			echo '<a href="'.(string)$item->link.'">'.(string)$item->title.'</a></br>'.(string)$item->description.'</br><i>publié le'.(string)date('d/m/Y',strtotime($item->pubDate)).'</i></br></br>';

                if(++$i>=$nb_affichage)
                break;
                }

                }
			
                catch(Exception $e){
                echo $e->getMessage();
                }
           ?>
           </div>

Or mon site FUNIX hébergé en mutualisé chez online.net tourne encore en PHP4 qui ne reconnait pas la commande simplexml_load_file. Heureusement, via la commande d’administration on peut le faire évoluer vers les versions 5.5, 5.6 et même 7. Pour éviter une marche trop haute, j’ai choisi de migrer vers la version 5.6 et là catastrophe, tous les accents étaient en vrac. Toutes les solutions trouvées sur internet pour forcer le jeu de caractères par défaut (charset) de UTF-8 vers celui utilisé par mes pages, à savoir le ISO-8859-1, n’ont pas fonctionné. J’étais donc quitte pour modifier une à une toutes mes pages !

Fort heureusement, et c’est bien un des gros atouts d’une système UNIX, il existe les scripts bash, il m’a fallu à peine quelques minutes pour régler le problème. Tout d’abord j’ai appliqué sur mes pages le script suivant qui permet de convertir les caractères du jeu de caractère ISO-8859-1 vers UTF-8 :

#!/bin/bash
find . -name "*.php" -o -name "*.htm*" -exec sh -c "( \
   iconv -f ISO_8859-1 -t UTF-8 {} -o {}.iconv ; \
   mv {}.iconv {} ; \
)" \;

Ensuite il a fallu modifier l’indication de charset dans les pages html et php avec le script suivant :

#!/bin/bash
for file in *.htm*
do
  echo "Traitement de $file ..."
  sed -i -e "s/ISO-8859-1/UTF-8/g" "$file"
  sed -i -e "s/iso-8859-1/UTF-8/g" "$file"
done
for file in *.php
do
  echo "Traitement de $file ..."
  sed -i -e "s/ISO-8859-1/UTF-8/g" "$file"
  sed -i -e "s/ISO-8859-1/UTF-8/g" "$file"
done

Et le tour est joué.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Vérification anti robot *