rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[parser php] remplacement automatique

Posté par Edouard, le mardi 14 août 2007 à 15:52:08
Bonjour à tous,

Je recherche un script php qui permet de parser des chaines de caractères issues d'une requete mysql et de remplacer certains mots par quelquechose de ce type <a href...>mot</a>.

Je pense que ça existe pour générer automatiquement des infosbulles à partir d'une table (Mot à remplacer | lien de l'infobulle), mais sur Google, je ne trouve pas les bons mots clés.

Merci d'avance.

Edouard
Répondre à Edouard  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le mardi 14 août 2007 à 16:01:55
Ben globalement, tu as besoin de str_replace
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.
..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...
Répondre à kilian

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
edouard, le mardi 14 août 2007 à 16:08:54
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
Répondre à edouard

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le mardi 14 août 2007 à 16:16:54
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:
// 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);
..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...
Répondre à kilian

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Edouard, le mardi 14 août 2007 à 16:25:06
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
Répondre à Edouard

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le mardi 14 août 2007 à 16:43:04
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....
..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...
Répondre à kilian

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Edouard, le mardi 14 août 2007 à 16:47:34
je teste dans 10 minutes et je te dis
Répondre à Edouard

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Edouard, le mardi 14 août 2007 à 17:16:34
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
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["infobul­le"]);//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.&qu­ot;');\" 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.&qu­ot;');\" 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";
Répondre à Edouard

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le mardi 14 août 2007 à 17:17:18
Merci :-)
..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...
Répondre à kilian

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Edouard, le mardi 14 août 2007 à 17:27:38
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
Répondre à Edouard

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le mardi 14 août 2007 à 17:49:59
Pour ignorer la casse, fait ça au niveau de ta requête:
SELECT LOWER(champs).....


EDIT: Ah mais chuis bête, ça changera pas ton texte de départ.... :-/
..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...
Répondre à kilian

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Edouard, le mardi 14 août 2007 à 18:14:38
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...
Répondre à Edouard

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Edouard, le mardi 14 août 2007 à 19:07:37
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
Répondre à Edouard

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 kilian, le jeudi 16 août 2007 à 09:18:54
Ben je t'avouerais que je suis pas assez chaud de la regexp pour t'aider là....
..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...
Répondre à kilian
Logiciels pertinents trouvés dans les téléchargements
Télécharger PHP Edit 0.6PHP Edit - PHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de...Catégorie: PHP
Licence: Freeware/gratuit
Télécharger Caledos Automatic Wallpaper Changer   6.5.2Caledos Automatic Wallpaper Changer - Caledos Automatic Wallpaper Changer est comme son nom l'indique, un gestionnaire de fond d'écran. Les principales...Catégorie: Organiseur
Licence: Freeware/gratuit
Télécharger Automatic Backup   1.2.0Automatic Backup - Quand vous perdez vos données, il n'est pas nécessaire de vous persuader de posséder un programme de sauvegarde efficace. ...Catégorie: Sauvegarde
Licence: Freeware/gratuit
Télécharger All In One Video Script 1.0All In One Video Script - All In One Video Script est un script pour l'extension GreaseMonkey pour le navigateur Firefox permettant de détecter la...Catégorie: Vidéo
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « [parser php] remplacement automatique »