[parser php] remplacement automatique
Fermé
Edouard
-
14 août 2007 à 15:52
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 16 août 2007 à 09:18
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 16 août 2007 à 09:18
A voir également:
- [parser php] remplacement automatique
- Coco chat remplacement - Accueil - Réseaux sociaux
- Remplaçant de Coco : quelles solutions pour tchater gratuitement en ligne ? - Accueil - Réseaux sociaux
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Message automatique thunderbird - Guide
- Easy php - Télécharger - Divers Web & Internet
13 réponses
Voilà le code fonctionnel.
Attention j'appel certaines fonctions qui ne sont pas présente dans ce script, pas le temps et confidentialité oblige, mais ça donne une bonne idée de comment faire...
voici le structure de la table
et voici le code php
Attention j'appel certaines fonctions qui ne sont pas présente dans ce script, pas le temps et confidentialité oblige, mais ça donne une bonne idée de comment faire...
voici le structure de la table
CREATE TABLE `annuaire` ( `id` INT NOT NULL AUTO_INCREMENT , `motcle` VARCHAR( 20 ) NOT NULL , `infobulle` VARCHAR( 100 ) NOT NULL , `url` VARCHAR( 100 ) NOT NULL , `target` INT( 1 ) NOT NULL , PRIMARY KEY ( `id` ) );
et voici le code php
// Requête de remplacement $sqlreplace=mysql_query("select* from annuaire"); $nbrlignesqlreplace=mysql_num_rows($sqlreplace);//nombre de ligne if ($nbrlignesqlreplace=="0"){ echo AuStripSlashes("Il n'y a pas de données de remplacement !"); }//fin if else{ while ($rowsqlreplace=mysql_fetch_array($sqlreplace)) { // récupération des valeurs ligne à ligne $Id_replace=$rowsqlreplace["id"]; $motcle_replace=$rowsqlreplace["motcle"]; $infobulle_replace=AuAddSlashes($rowsqlreplace["infobulle"]);//pour ne pas être ennuyé par les apostrophes $url_replace=$rowsqlreplace["url"]; $target_replace=$rowsqlreplace["target"]; //affectation des colonnes dans les tableaux 'SEARCH' $SEARCH[]=$motcle_replace; //affectation des colonnes dans les tableaux 'REPLACE' if($target_replace=="1"){ // on utilise un target blank $lieninfobulle="<a target=\"_blank\" href=\"".$url_replace."\" OnClick=\"PopItUp('addfolder.php',500,200);\" OnMouseOver=\"BulleWrite('".$infobulle_replace."');\" OnMouseOut =\"BulleHide ();\">".$motcle_replace."</a>"; $REPLACE[]=$lieninfobulle; }//fin if else{ // on ouvre le lien dans la même page $lieninfobulle="<a href=\"".$url_replace."\" OnClick=\"PopItUp('addfolder.php',500,200);\" OnMouseOver=\"BulleWrite('".$infobulle_replace."');\" OnMouseOut =\"BulleHide ();\">".$motcle_replace."</a>"; $REPLACE[]=$lieninfobulle; }//fin else // ensuite on appliquera le remplacement de mot dans les chaines aux variables issues de la seconde requête }//fin while }//fin else // Création de la requete sql $sql=mysql_query("select * from actualites $clause"); $nbrligne=mysql_num_rows($sql);//nombre de ligne if ($nbrligne=="0"){ echo AuStripSlashes("Il n'y a pas d'actualités dans la base de données."); } else{ while ($row=mysql_fetch_array($sql)) { $Id_actualite_ligne=$row["Id_actualite"]; $Titre_actualite_ligne=$row["Titre_actualite"]; $Date_actualite_ligne=$row["Date_actualite"]; // formatage de la date ... $Texte_actualite_ligne=str_replace($SEARCH, $REPLACE, $row["Texte2_actualite"]); ... ensuite le script continue, il suffit de ce code pour afficher le texte modifié echo"$Texte_actualite_ligne";
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
14 août 2007 à 17:49
14 août 2007 à 17:49
Pour ignorer la casse, fait ça au niveau de ta requête:
EDIT: Ah mais chuis bête, ça changera pas ton texte de départ.... :-/
SELECT LOWER(champs).....
EDIT: Ah mais chuis bête, ça changera pas ton texte de départ.... :-/
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
14 août 2007 à 16:01
14 août 2007 à 16:01
Ben globalement, tu as besoin de str_replace
http://fr2.php.net/manual/fr/function.str-replace.php
qui s'utilise comme ça:
Après il faut voir selon le contexte.
http://fr2.php.net/manual/fr/function.str-replace.php
qui s'utilise comme ça:
$nouvelle_chaine = str_replace('mot_à_replacer', 'mot_de_remplacement', $ancienne_chaine);
Après il faut voir selon le contexte.
si je te suis :
je fais une requête pour chercher dans ma bdd mysql tous les couples 'mot à remplacer' / 'mot de remplacement', que je met par exemple dans un tableau,
puis je fais une requête pour extraire les chaines de caractère originelles,
enfin je fais deux boucles imbriquées pour remplacer chaine par chaine puis mot par mot les bout de chaine ?
En terme de performance, j'ai peur que la page mette du temps à s'afficher s'il y a de longues chaines et pas mat de mots à remplacer ?
qu'en penses tu ?
Edouard
je fais une requête pour chercher dans ma bdd mysql tous les couples 'mot à remplacer' / 'mot de remplacement', que je met par exemple dans un tableau,
puis je fais une requête pour extraire les chaines de caractère originelles,
enfin je fais deux boucles imbriquées pour remplacer chaine par chaine puis mot par mot les bout de chaine ?
En terme de performance, j'ai peur que la page mette du temps à s'afficher s'il y a de longues chaines et pas mat de mots à remplacer ?
qu'en penses tu ?
Edouard
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
14 août 2007 à 16:16
14 août 2007 à 16:16
Il ya beaucoup de mots à remplacer dans la table de remplacement?
Parce que tu n'as qu'un appel de str_replace à faire, même pas besoin de passer par une boucle.
Tiens regarde cet exemple tiré du site de php:
Parce que tu n'as qu'un appel de str_replace à faire, même pas besoin de passer par une boucle.
Tiens regarde cet exemple tiré du site de php:
// Génère : Vous devriez manger des pizzas, des glaces et des gâteaux tous les jours. $phrase = "Vous devriez manger des fruits, des légumes et des fibres tous les jours."; $regime = array("fruits", "légumes", "fibres"); $bonne_chere = array("pizzas", "glaces", "gâteaux"); echo $newphrase = str_replace($regime, $bonne_chere, $phrase);
j'étais en train de me pencher sur cette histoire de tableau dans ton premier lien.
Le remplacement se fait par ordre ET selon l'index auto du tableau ? (merci de confirmer)
Si c'est le cas, ça doit fonctionner, (je pense pas qu'il y aura plus de 200 mots dans mon 'index').
Le but en fait c'est de retrouver des mots qui ont une définition dans une table et de les remplacer automatiquement par le mot encadré d'un lien avec une infobulle.
Merci, je publierai le code quand il sera fait (même si c'est pas compliqué) pour faciliter la vie aux autres.
Edouard
Le remplacement se fait par ordre ET selon l'index auto du tableau ? (merci de confirmer)
Si c'est le cas, ça doit fonctionner, (je pense pas qu'il y aura plus de 200 mots dans mon 'index').
Le but en fait c'est de retrouver des mots qui ont une définition dans une table et de les remplacer automatiquement par le mot encadré d'un lien avec une infobulle.
Merci, je publierai le code quand il sera fait (même si c'est pas compliqué) pour faciliter la vie aux autres.
Edouard
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
14 août 2007 à 16:43
14 août 2007 à 16:43
Oui ça se fait par ordre de même index entre $regime et $bonne_chere.
$regime[0] sera remplacé par $bonne_chere[0]
$regime[1] sera remplacé par $bonne_chere[1] etc...
200 mots c'est quand même beaucoup.
Bon il faut voir, ce sera sûrement négligeable dans le temps d'execution de ton script....
$regime[0] sera remplacé par $bonne_chere[0]
$regime[1] sera remplacé par $bonne_chere[1] etc...
200 mots c'est quand même beaucoup.
Bon il faut voir, ce sera sûrement négligeable dans le temps d'execution de ton script....
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
14 août 2007 à 17:17
14 août 2007 à 17:17
Merci :-)
A améliorer en implémentant la gestion de la "casse".
Pour l'instant si le mot commence par une majuscule, il ne sera pas reconnu, idem pour les accents,...
Je vais voir si on peut faire ça intéligement via des paramètres dans ma table annuaire
(booléen du type 'ignorer la casse' ; 'ignorer les accents' ...)
Je reposterai en fin de semaine.
Edouard
http://www.promete.fr
Pour l'instant si le mot commence par une majuscule, il ne sera pas reconnu, idem pour les accents,...
Je vais voir si on peut faire ça intéligement via des paramètres dans ma table annuaire
(booléen du type 'ignorer la casse' ; 'ignorer les accents' ...)
Je reposterai en fin de semaine.
Edouard
http://www.promete.fr
pas possible sinon ça va modifier le texte à afficher (on aurait également pu avec php).
il existe une fonction str_ireplace en php5, mais faut que je passe à easy php2...
il existe une fonction str_ireplace en php5, mais faut que je passe à easy php2...
str_ireplace çà trouve bien toutes les occurences (y compris quand la chaine de caractère recherché fait partie d'un mot) mais ça a le même effet que LOWER.
Dans mon cas :
Musées devient musées
musée devient musée
et Musée devient musée
Ce qui fait quand même bizarre à la lecture... lol
En fait je voudrais appliquer le remplacement avant et après l'occurence mais ne pas modifier la dite chaine de caractère.
Je crois que preg_replace est une piste, mais je galère (comme à chaque fois avec les regex...)
Enfin, il est l'heure, je me casse.
A+
Edouard
Dans mon cas :
Musées devient musées
musée devient musée
et Musée devient musée
Ce qui fait quand même bizarre à la lecture... lol
En fait je voudrais appliquer le remplacement avant et après l'occurence mais ne pas modifier la dite chaine de caractère.
Je crois que preg_replace est une piste, mais je galère (comme à chaque fois avec les regex...)
Enfin, il est l'heure, je me casse.
A+
Edouard
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
16 août 2007 à 09:18
16 août 2007 à 09:18
Ben je t'avouerais que je suis pas assez chaud de la regexp pour t'aider là....