Problème d'accents dans le plugin mySearch 1.1.4.
Barry
Member
dans Modifications
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 :
juste après :
Salut à tous ! Bonne continuation à bientôt...
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...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Au lieu d'utiliser ta fonction suppr_accents, peux-tu me dire si cela fonctionnerait avec Dans le fichier core/lib/class.plx.utils.php, il a déjà une fonction qui supprime les accents.
Merci
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
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.
Je vais regarder pour mettre à jour mon plugin avec tes modifs
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Ca évitera d'écraser mes modifs dans les futures mises à jours... ;-)
Encore merci Stéph.
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++) 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 et développeur de PluXml (2010 à 2018)
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 été 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 ?
http://forum.pluxml.org/viewtopic.php?pid=28408#p28408
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)