8792 sujets

Développement web côté serveur, CMS

Bonjour !

J'ai codé une fonction qui me ajoute la description d'un sigle dans mon code. Le but est d'avoir l'acronyme au survol de la souris.

Voilà le code:

//Fonction pour générer un contenu accessible au niveau des abréviations
function accessibilite($buffer)
{
$liste=array(
"PAPA"=>"Parcours d'Activités Physiques Aménagé",
"CAS"=>"Centre d'Animations Sportives",
"TGV"=>"Train à Grande Vitesse",
"PDF"=>"Portable Document Format",
"CNI"=>"Carte Nationale d'Identité",
"D.D.A.S.S"=>"Direction Départementale de l'Action Sanitaire et Sociale",
// j'abrège la liste, qui est longue
"CCDPCSA"=>"Commission Consultative Départementale de la Protection Civile, de la Sécurité et de l'Accessibilité",
"CSTB"=>"Centre Scientifique et Technique du Bâtiment",
"S.A.R.L."=>"Société A Responsabilité Limitée",
"S.A."=>"Société Anonyme",
"EURL"=>"Entreprise Unipersonnel à Responsabilité Limitée"
);
foreach($liste as $abreviation => $acronyme)
	{
	$buffer = ereg_replace($abreviation,'<acronym title="'.$acronyme.'">'.$abreviation.'</acronym>',$buffer);
	};
return $buffer;
};


Le problème est le suivant: je n'arrive à trouver l'expression exacte et complète.
Exemple plus parlant: S.A. et S.A.R.L.
Au "parsage" de SARL, mon code me colle l'acronyme de SARL puis au milieu celui de SA.
J'ai regardé la doc PHP et je en trouve pas comment trouver la chaîne complète et non segmentée.
J'ai pensé à des ruses comme ne pas mettre de point à la fin de mon sigle, ou des espaces, mais c'est hyper contraignant...
Donc si vous avez une idée Smiley smile
Modifié par BruceFeuillette (22 Feb 2006 - 17:27)
Bonjour,

En testant :


foreach($liste as $abreviation => $acronyme)

	{
if ( !ereg($abreviation, $buffer) ) {
	$buffer = ereg_replace($abreviation,'<acronym title="'.$acronyme.'">'.$abreviation.'</acronym>',$buffer);
                                             }
	};
Ca désactive la fonction Smiley smile
En fait dans $buffer on trouve l'intégralité de ma page.
J'appelle ça en ouverture de page, ça analyse tout mon code et me retourne la page complète formatée.
Le but du jeu c'est de lui faire comprendre que la séquence S.A. est différente de S.A.R.L.
Bon, je m'en suis sorti.
Si ça intéresse d'autres personne, je laisse l'ossature de la fonction.
Pratique pour ne pas avoir à mettre systématiquement les balises acronymes.


//Fonction pour générer un contenu accessible au niveau des abréviations
function accessibilite($buffer)
{
/*
DESCRIPTION DU TABLEAU

On crée une liste qui contient le sigle à trouver.
Syntaxe des sigles: !IMPORTANT
A[.]B[.]C[.] => chaque lettre doit être séparée par un point et se termine par un point.
Les crochets permettent de dire que le . est un caractère faisant partie de l'expression.
sigle => Sigle classique qui sera affiché dans la page
valeur => Valeur de remplacement du sigle, version A.B.C.
details => Sigle développé
*/
$liste=array(
"PAPA"=>array("sigle"=>"PAPA","valeur"=>"%acr001%","detail"=>"Parcours d'Activités Physiques Aménagé"),
"CAS"=>array("sigle"=>"CAS","valeur"=>"%acr002%","detail"=>"Centre d'Animations Sportives"),
"TGV"=>array("sigle"=>"TGV","valeur"=>"%acr003%","detail"=>"Train à Grande Vitesse"),
"PDF"=>array("sigle"=>"PDF","valeur"=>"%acr004%","detail"=>"Portable Document Format"),
"CNI"=>array("sigle"=>"CNI","valeur"=>"%acr005%","detail"=>"Carte Nationale d'Identité"),
"D[.]D[.]A[.]S[.]S"=>array("sigle"=>"D.D.A.S.S","valeur"=>"%acr006%","detail"=>"Direction Départementale de l'Action Sanitaire et Sociale"),
//Coupure dans la liste
"S[.]A[.]"=>array("sigle"=>"S.A.","valeur"=>"%acr050%","detail"=>"Société Anonyme"),
"S[.]A[.]R[.]L[.]"=>array("sigle"=>"S.A.R.L.","valeur"=>"%acr049%","detail"=>"Société A Responsabilité Limitée"),
"E[.]U[.]R[.]L[.]"=>array("sigle"=>"E.U.R.L.","valeur"=>"%acr051%","detail"=>"Entreprise Unipersonnelle à Responsabilité Limitée"),
"U[.]E[.]"=>array("sigle"=>"U.E.","valeur"=>"%acr052%","detail"=>"Union Européenne"),
"ADEMVAL"=>array("sigle"=>"ADEMVAL","valeur"=>"%acr053%","detail"=>"Association pour le Développement Economique du Mâconnais Val de Saône"),
"Z[.]I[.]"=>array("sigle"=>"Z.I.","valeur"=>"%acr054%","detail"=>"Zone Industrielle")
);
//Fonction permettant de trier le tableau en mettant les plus grands sigles en premier
function longueur_cle($a, $b)
    {
    if (strlen($a) == strlen($b)) return 0;
    return (strlen($a) > strlen($b)) ? -1 : 1;
    };
//On trie la liste du plus grand terme au plus petit terme
uksort($liste, "longueur_cle");
//Premier tri pour remplacer les acronymes par une valeur fixée auparavant
foreach($liste as $abreviation => $acronyme)
    {
    $buffer = ereg_replace($abreviation,$acronyme['valeur'],$buffer);
    };
//Second tour pour remplacer la valeur de l'acronyme par son terme premier
foreach($liste as $abreviation => $acronyme)
    {
    $buffer = ereg_replace($acronyme['valeur'],'<acronym title="'.$acronyme['detail'].'">'.$acronyme['sigle'].'</acronym>',$buffer);
    };
return $buffer;
};


La fonction s'appelle avec un ob_start("accessibilite").

EDIT du 23/02: il y avait une erreur de ma part
- les points sont des caractères spéciaux dans la recherche, donc j'ai du en tenir compte en modifiant les tableaux.
- la syntaxe des sigles doit être rigoureuse en mettant des point entre chaque lettre sinon un mot écrit en majuscule est potentiellement remplaçable, par erreur.
Modifié par BruceFeuillette (23 Feb 2006 - 10:47)