Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2710 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Autocompletion sur un <input text>

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Autocompletion sur un <input text>

n°2011928
abais
Posté le 26-07-2010 à 19:47:43  profilanswer
 

Bonjour,

 

Le contexte :
Dans un back-office, je souhaite mettre un systeme de tags d'image.
J'ai donc un <input text> dans lequel je souhaite mettre un systeme d'auto-complétion.
Je vous epargne le JS et les requetes BDD pour se concentrer sur le problème.

 

J'ai donc une liste de suggestion, dans laquelle le motif reconnu se met en gras.
Je veux que se motif soit tolérant vis-a-vis des accents et ignore la casse.

 

J'ai réussi à en venir à bout, mais je ne pense pas m'y être pris de la bonne façon...
Quelques incompréhensions me frustrent...

 

Voici le code :

 
Code :
  1. function cleanAccent($texte)
  2. {
  3.     $aremplacer = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ&#340;&#341;';
  4.     $enremplacement = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyrr';
  5.     $texte = strtr(utf8_decode($texte), utf8_decode($aremplacer), $enremplacement);
  6.     return $texte;
  7. }
  8.  
  9. function boldingMotif($texte, $motif)
  10. {
  11.     $texteClean = strtolower($texte); // On stock le texte en minuscule
  12.     $texteClean = cleanAccent($texteClean); // On remplace les caractere speciaux
  13.     
  14.     $pos = strpos($texteClean, $motif); // position du motif trouvé
  15.     $long = strlen($motif); // Longueur du motif
  16.     
  17.     // On a donc la position et la longueur... on a plus qu'à reprendre notre var originale
  18.     // pour entourer le motif (dans son contexte original) de balises <strong>...
  19.     $result = substr_replace(utf8_decode($texte),'</strong>',$pos+$long,0);
  20.     $result = substr_replace($result,'<strong>',$pos,0);
  21.     
  22.     // On renvoie la sauce...
  23.     return utf8_encode($result);
  24. }
  25.  
  26.  
  27. // on test un exemple :
  28.  
  29. $name = "GÉRard";
  30. $motif = "er";
  31.  
  32. echo 'titre original : '.$name.'<br />';
  33. echo 'motif cherché : '.$motif.'<br />';
  34. echo 'Resultat : '.boldingMotif($name, $motif);
 

Le tout retourne bien "GÉRard // GeRard // GÉRard " :)

 

1/ Je ne comprend pas pourquoi je suis obligé de mettre des utf8_decode/encode...
sans ça, ça ne marche pas... la fonction cleanAccent() a été largement inspiré d'une source.
Mon fichier, mon header() ainsi que le charset HTML sont en UTF-8, pourquoi devoir décoder pour comparer ?

 

2/ Je n'ai pas trouver de regex pour faciliter la tache de boldingMotif()...
En existe t-il une qui permettrait d'en arriver au même résultat ? (c'est la "tolérance" des accent qui me pose problème, ainsi que laisser la suggestion dans son contexte original...)


Message édité par abais le 27-07-2010 à 10:28:57

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
mood
Publicité
Posté le 26-07-2010 à 19:47:43  profilanswer
 

n°2011985
Dj YeLL
$question = $to_be || !$to_be;
Posté le 27-07-2010 à 08:47:01  profilanswer
 
n°2012029
abais
Posté le 27-07-2010 à 10:43:17  profilanswer
 


Merci, j'ai lu une autre page sur les Character Sets / Character Encoding Issues, ça soulage de comprendre...
Avant d'utiliser l'extension mbstring, je vais vérifier un autre truc, suite à la lecture de l'article et les symptôme que je rencontre, je me dis que c'est le strlen qui au final me posait le plus gros problème...


Message édité par abais le 27-07-2010 à 10:43:37

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°2023866
the_bigboo
Posté le 20-09-2010 à 14:46:15  profilanswer
 

Pour essayer de répondre simplement, le coeur de PHP est en ISO et il ne sait traiter les chaines utf-8 que si tu les lui décodes avant. C'est aussi simple que ça :)
 
Normalement, PHP 6 devait apporter l'unicode à PHP, mais de ce que je crois ca ne sera pas pour tout de suite :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Autocompletion sur un <input text>

 

Sujets relatifs
[JQuery] Plugin Validate. Validation d'un input avec valeur par défautAutocomplétion php/mysql/js
Problème autocomplétion javascriptMettre à jour une URL en temps réel selon ce qui est écrit ds 1 input
Récupérer l'id d'un input[Perl] Comment envoyer le contenu d'un fichier text par mail
changer la couleur d'un text input quand on tape dedans?Insertion Mysql champ Text plante ! via Zend
Plus de sujets relatifs à : Autocompletion sur un <input text>


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)