Problème d'accents dans le plugin mySearch 1.1.4.

Bonjour chers plumxmliens,

je viens de m'apercevoir que le champ de recherche ne gérait pas les accents et donc ne ramenait rien quand l'utilisateur avait le malheur d'oublié un accents ce qui arrive très souvent...

J'ai donc rajouté une petite fonction au plugin qui permet de palier à ce problème.
Le fichier à modifier s'appel : form.search.php

ajoutez la fonction suivante au tout début du script :
function suppr_accents($str, $encoding='utf-8')
{
    // transformer les caractères accentués en entités HTML
    $str = htmlentities($str, ENT_NOQUOTES, $encoding);

    // remplacer les entités HTML pour avoir juste le premier caractères non accentués
    // Exemple : "&ecute;" => "e", "&Ecute;" => "E", "Ã " => "a" ...
    $str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str);

    // Remplacer les ligatures tel que : Œ, Æ ...
    // Exemple "Å“" => "oe"

    $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);

    // Supprimer tout le reste
    $str = preg_replace('#&[^;]+;#', '', $str);

    return $str;
}
Ensuite il faut faire une insertion à trois endroits :

juste après :
	# valeur de recherche
	$searchword = strtolower(htmlspecialchars(trim($_POST['searchfield'])));
insérez :
$searchword = suppr_accents($searchword);
ensuite après :
	# recherche dans les articles
	$plxGlob_arts = clone $plxMotor->plxGlob_arts;
	$motif = '/^[0-9]{4}.['.$plxMotor->activeCats.',]*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';
	if($aFiles = $plxGlob_arts->query($motif,'art','rsort',0,false,'before')) {
		foreach($aFiles as $v) { # On parcourt tous les fichiers
			$art = $this->plxMotor->parseArticle(PLX_ROOT.$plxMotor->aConf['racine_articles'].$v);
			$searchstring  = strtolower(addslashes($art['title'].$art['chapo'].$art['content']));
insérez ceci :
$searchstring = suppr_accents($searchstring);
ensuite après ce code :
	# recherche dans les pages statiques
	if($plxMotor->aStats) {
		foreach($plxMotor->aStats as $k=>$v) {
			if($v['active']==1 AND $v['url']!=$plxMotor->mode) { # si la page est bien active
				$filename=PLX_ROOT.$plxMotor->aConf['racine_statiques'].$k.'.'.$v['url'].'.php';
				if(file_exists($filename)) {
					$searchstring  = strtolower(addslashes(file_get_contents($filename)));
insérez la même ligne :
$searchstring = suppr_accents($searchstring);
voilà avec cette modif tous les accents sont gérés et la recherche ramène les résultats attendus.

Salut à tous ! Bonne continuation à bientôt...

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour Barry
    Au lieu d'utiliser ta fonction suppr_accents, peux-tu me dire si cela fonctionnerait avec
    plxUtils::removeAccents($searchstring)
    
    Dans le fichier core/lib/class.plx.utils.php, il a déjà une fonction qui supprime les accents.
    Merci

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Merci Stéphane pour ta réponse rapide.

    J'ai testé avec ton objet ça fonctionne parfaitement et c'est plus propre donc j'ai adopté cette solution finalement.
    Encore merci de ton aide.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Ok super
    Je vais regarder pour mettre à jour mon plugin avec tes modifs

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Excellente nouvelle !
    Ca évitera d'écraser mes modifs dans les futures mises à jours... ;-)
    Encore merci Stéph.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour Barry
    Je reviens sur ce problème d'accents car aucune des 2 solutions proposées (ta fonction suppr_accents et ma solution avec plxUtils::removeAccents) ne fonctionne avec les tests que j'ai fait.
    Utilises-tu un éditeur wysiwyg genre ckeditor (car certains éditeurs transpose les caractères accentués en équivalent html) ?
    Peux-tu regarder dans le fichier .xml d'un article qui contient le mot recherché si tu as des caractères accentués ou leurs équivalents html stp ?
    Dans mon cas voilà ce que j'ai fait (et qui ne fonctionne pas)
    - dans le fichier xml d'un article j'ai mis comme contenu le texte suivant (édition du fichier à la main à partir d'un éditeur de texte comme notepad++)
    	<content><![CDATA[L'arrivée des beaux jours... c'est bientôt l'&eacute;t&eacute;]]></content>
    
    Comme on peut le voir j'ai des caractères accentués et des équivalents html.
    - En faisant une recherche avec le mot "été", je n'ai aucun résultat dans la recherche (avec et sans les solutions proposées)

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • BarryBarry Member
    novembre 2012 modifié
    Salut Steph,

    oui j'utilise WymEditor comme éditeur wysiwyg, qui lui ne transforme pas les accents en équivalent html.
    C'est pour ça que chez mon la recherche fonctionne.
    Ne peut tu pas inclure la recherche de ces chaines de caractères au niveau du plugin ?
    Comme ça la recherche fonctionnera quelque soit l'éditeur...

    Par contre chose étrange j'ai fais le test de mon côté et lorsque je met dans mon xml à la main le mot &eacutet&eacute et que je recherche le mot "été dans le champ de recherche, cela fonctionne très bien.
    Il me ramène bien ma page...
    tu utilises quel éditeur wysiwyg toi ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    Plugin mis à jour en version 1.2 pour corriger ce problème d'accents
    http://forum.pluxml.org/viewtopic.php?pid=28408#p28408

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Cool merci Steph, encore merci pour ton efficacité et ta réactivité, à la prochaine.... adio
Connectez-vous ou Inscrivez-vous pour répondre.