|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : novembre 2009 Messages : 12 ![]() |
Dans mon application je recherche tous les textes qui contiennent un certain mot, par exemple Eglise, et je souhaite mettre les mots trouvés en surbrillance.
Tous les mots avec ou sans accents doivent être trouvés. Pour ce faire je transforme le critère reçu (ici $critere="Eglise") avec des instructions preg_replace, c'est à dire dans le cas présent : Code :
Code :
$nb=preg_match_all($critere, $texte, $matches, PREG_OFFSET_CAPTURE); Merci à qui pourra me dire où est mon problème. Caperquy |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : janvier 2006 Messages : 951 ![]() |
cherche du coté de l'encoding accepté par la fonction preg_replace. si tu n'as pas le bon encodage, ça marchera pas.
__________________
PHP fait nativement la validation d'adresse électronique Utilisez le bouton résolu! |
|
|
00
|
|
|
#3 | ||
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
ton preg_replace n'est pas bon :
église va devenir : (e|è|é|ê|ë)(e|è|é|ê|ë)glis(e|è|é|ê|ë) si tu veux supprimer les accents fait : Code :
__________________
http://blog.stealth35.com/ |
||
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : novembre 2009 Messages : 12 ![]() |
Merci pour la réponse.
En fait je ne cherche pas à supprimer les accents, mais seulement à localiser le mot, qu'il ait ou non un accent. CapErquy |
|
|
00
|
|
|
#5 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
sauf qu'il fait la différence entre un mot avec accents et un mot sans accents, donc t'es bien obligé de tout mettre au même niveau, a la base c'est pour faire quoi ? ton texte il vient d'où ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : novembre 2009 Messages : 12 ![]() |
Mon texte vient d'une base de données MySQL dans laquelle se trouvent des résumés d'articles. L'utilisateur cherche à retrouver quels articles traitent d'un sujet identifié par le mot clé qu'il a choisi. En retour je veux lui renvoyer le ou les articles trouvés avec le ou les mots correspondants mis en surbrillance.
Au départ on ignore donc si dans les différents articles on trouvera le mot cherché avec ou sans accents. CapErquy |
|
|
00
|
|
|
#7 |
|
Membre régulier
![]() Inscription : octobre 2007 Messages : 239 ![]() |
euhh.... ça à l'air un peu costaud, non ?
car lui, il peut rechercher : Eglise / église / eglise /eglises / églises / etc.... et sans compter les fautes (bon, là, c'est vrai , ça sera normal qu'il trouve pas, et pourquoi pas preciser "attention aux fautes" ) il faut donc peut etre recuperer le mot et chercher toutes les solutions Eglise / église / eglise /eglises / églises ... a noter que si tu cherches eglises avec un "s" tu trouveras pas eglise sans "s" et si tu cherches Eglise, comment tu peux savoir qu'on peux remplacer le "E" par un "é", et non pas par un "e" .... ... y'a du taffe , je pense , pour faire un bon moteur......!! |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : novembre 2009 Messages : 12 ![]() |
Merci à Zugolin pour la réponse.
Je ne suis pas concerné par les pluriels ou autres fautes qui sont inévitables, mais je veux juste retrouver les mots sans me soucier des majuscules ou minuscules, ni des caractères accentués que j'ai définis en utilisant les expressions régulières (voir mon premier message sur ce sujet). Il se trouve que quand je soumets directement à mes instructions preg_replace et preg_match un texte dans lequel j'utilise les mots Eglise, église, eglise les trois écritures sont bien reconnues. Par contre je reçois mes données à partir d'une base de données MySQL et là çà ne marche plus. Je soupçonne un problème d'encoding mais je n'arrive pas à déterminer lequel. D'où mon appel à l'aide |
|
|
00
|
|
|
#9 |
|
Membre régulier
![]() Inscription : octobre 2007 Messages : 239 ![]() |
église, par exemple , il serait pas en html, dans ta bdd :
é => é ou numérique => & # 233 ; (je mets des espaces, sinon, l'editeur re-interprete le code) ou bien une histoire de utf8 ou iso-8859-1 ....? faudrait plutot aller voir du coté mysql, alors...non? |
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : novembre 2009 Messages : 12 ![]() |
Non je n'utilise pas les symboles tels que é dans ma base de données. J'ai essayé de basculer ma table en utf8_general_ci ; les mots tels que église sont alors bien retrouvés mais c'est également tout l'ensemble des caractères accentués qui apparaissent alors sous la forme � lors de l'affichage.
MySQL ne me propose pas l'option iso-8859-1 Je désespère de trouver une solution. En tous cas merci d'avoir essayé de m'aider CapErquy |
|
|
00
|
|
|
#11 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
tu fais pas la recherche direct dans la requete SQL ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#12 | |
|
Membre régulier
![]() Inscription : octobre 2007 Messages : 239 ![]() |
c'est peut etre ta page php elle meme qui pourrait avoir des problemes d'encodage, alors ;
du coté du doctype : Citation:
|
|
|
|
01
|
|
|
#13 | |
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 239 ![]() |
Citation:
Si tu ne veux pas utiliser l'utf-8 essayes l'Interclassement latin1_swedish_ci
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
|
|
|
00
|
|
|
#14 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 586 ![]() |
Code php :
$critere = preg_replace('/[eèéêë]/iu', '[eèéêë]', $critere); http://php.net/manual/fr/function.preg-replace.php regarde highlighter dans les codes en dessous de la description de la fonction preg_replace. |
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() Inscription : novembre 2009 Messages : 12 ![]() |
Réponse à vorace :
je viens d'essayer ta formule : Code :
$critere = preg_replace('/[eèéêë]/iu', '(eèéêë)', $critere); preg_replace() [function.preg-replace]: Compilation failed: invalid UTF-8 string at offset 3 |
|
|
00
|
|
|
#16 |
|
Membre régulier
![]() Inscription : octobre 2007 Messages : 239 ![]() |
Code php :
$critere = preg_replace('/[eèéêë]/iu', '(eèéêë)', $critere); Code php :
$critere = preg_replace('#[eèéêë]#iu', '(eèéêë)', $critere); |
|
|
01
|
|
|
#17 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 586 ![]() |
si tu utilise notepad++, converti ton fichier en utf-8 (sans-BOM) et enregistre, voila pourquoi tu as cette erreur, tu n'as pas enregistré ton fichier en utf-8, si tu utilise un autre editeur (je ne connais pas les autres) ca doit etre faisable aussi et tu pourras utiliser le code que je t'ai donné, de plus dans la fonction preg_replace pour le second parametre tu dois mettre des [] a la place des parentheses.
|
|
|
00
|
|
|
#18 | |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
Citation:
parce que je t'ai deja dis ce que sa donne et visiblement personne percute : http://www.developpez.net/forums/d10...e/#post5750378
__________________
http://blog.stealth35.com/ |
|
|
|
00
|
|
|
#19 | ||
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 586 ![]() |
le but étant de mettre en surbrillance les mots telsque Eglise, église ou eglise si le mot rechercher est eglise donc une recherche indépendamment des accents le bout de code que j'ai mis provient de celui-ci :
Code :
|
||
|
|
00
|
|
|
#20 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
arf la bidouille...
et si tu mets cafette, il va ca mettre le mettre en surbrillance aussi et que le bout cafe
__________________
http://blog.stealth35.com/ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com