mercredi 5 décembre 2012

EXPRESSIONS REGULIERES

Lorsque la commande file ne permet pas de récupérer l'encodage d'une page aspirée, nous avons utilisé la fonction egrep.

Dans l'entête d'une page HTML, l'encodage est normalement indiqué dans la balise <meta>, par exemple :


<meta charset="UTF-8" />
 
Le problème est qu'il existe des différences dans la rédaction de cette balise en fonction des créateurs de la page. On peut trouver les cas suivants :
 
<meta charset = UTF-8 /> 
<meta charset='UTF-8' /> 
<meta charset=UTF-8 /> 
<meta charset="UTF-8"> 
 
Sans compter les différences entre HTML-6 et HTML-7 :
 
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />  
 
Pour extraire le nom de l'encodage avec la fonction egrep, nous allons donc devoir utiliser une expression régulière prenant en compte tous ces cas :
 
 "charset *= *['\"]?[^\"]+['\"]? */?>" 
 
Cette expression régulière permet de désigner une chaîne de caractères : 
 
- commencant par charset 
- suivi ou non d'un nombre d'espace indéterminé
- puis du signe égal et d'un nombre d'espace indéterminé
- puis de guillemets simples ou doubles ou rien
- puis n'importe quel caractère à part \" (c'est à dire le nom de l'encodage : UTF-8, ASCII, ISO...)
- puis de guillemets simples ou doubles ou rien
- puis d'un espace ou non
- puis un / ou non
- puis une fermeture de balise 

Voici comment on peut intégrer cette expression régulière dans la commande egrep :
 
egrep -i -o "charset *= *['\"]?[^\"]+['\"]? */?>" test.txt; 
 
Pour ne garder que le nom de l'encodage, on utilisera plusieurs fois la fonction egrep et la fonction cut :

encodage=$(egrep -i -o "charset *= *['\"]?[^\"]+['\"]? */?>" ../test.txt | cut -f2 -d\");
echo "L'encodage récupéré dans la page HTML est $encodage";
 
On pourra maintenant ajouter ce code dans une des boucles de notre script pour traiter les cas ou l'encodage n'est pas détecté par la commande file. 

Aucun commentaire:

Enregistrer un commentaire