8796 sujets

Développement web côté serveur, CMS

Bonjour,

J'essaye de mettre au point une fonction pour remplacer un mot ou une phrase dans un texte par du code HTML me permettant de jouer avec.
C'est pour un système de Tips, c'est à dire qu'une fois passé dans ma moulinette, quand l'internaute passe la souris sur un mot, il apparait une explication.

Voici ma fonction actuellement:
function tipsintext($texte) { 
	reset($_SESSION["listemots"]);
	$lcar_apres=array(" ","&nbsp;","<",",",";",":","!","'","&quot;","-","_","=",")","\.");
	while (list($mot,$chaine) = each($_SESSION["listemots"])) {
		reset($lcar_apres);
		while (list(,$c) = each($lcar_apres)) {  
			$motc = $mot . $c;
			$chainec= $chaine . addslashes($c);
			$texte = eregi_replace("$motc", "$chainec" , "$texte");
		}
	}
	return $texte;
}


Ca marche très bien...sauf quand un mot identifier contient une simple cote (').
Il ne le détecte pas..j'ai essayé avec addslashes, stripslashes, htmlentities, specialchar, etc...Je m'y perd et rien ne marche.

Pour info, dans ma base, le simple cote est enregistré avec u&rsquo;

Est ce que vous auriez des pistes pour m'aider à résoudre ce problème, voir un bout de scripts qui fonctionne

Merci
Marco
Modifié par pifoux (13 Aug 2009 - 22:21)
Salut,

on ne le dira jamais assez (ou plutôt : je ne me lasse pas de le répéter Smiley biggrin ) : il faut enregistrer ses données brutes et n'utiliser htmlentities (ou plutôt htmlspecialchars) qu'au moment de l'affichage dans un navigateur.

Bien sûr il est toujours possible d'utiliser html_entity_decode ou htmlspecialchars_decode...

Sinon je ne vois pas bien ce que fait ta fonction... et quoi que ce soit je serais surpris qu'une simple regexp ne fasse pas mieux. Smiley cligne
Salut

Je n'utilise pas htmlentities pour mettre à jour ma base...c'est plutot FCKEditor qui le fait pour moi..faudrait que je vois son paramétrage.

Les expressions régulières c'est pas trop mon truc.
Si tu as une piste à me conseiller mon améliorer mon affaire.....

Merci de ton aide

Marco
Salut,

Plusieurs remarques :
- Tu n'as pas de pattern, donc pourquoi utiliser une fonction gérant les expressions régulières ? Un simple str-ireplace() devrait faire l'affaire (cela dit, ça résoudra p'tet pas ton problème).
- Quitte à utiliser des fonctions d'expressions régulières, autant utiliser les fonctions preg_* qui sont beaucoup plus rapides à l'exécution.
pifoux a écrit :
Je n'utilise pas htmlentities pour mettre à jour ma base...c'est plutot FCKEditor qui le fait pour moi..faudrait que je vois son paramétrage.
cf. ce post.

Pour ce qui est de trouver le bon pattern il faudrait déjà que je comprenne ce que tu veux faire. Smiley langue
Salut

Merci pour le post, je l'ai étudié rapidement...il faudrait que je revois ma facon de travailler.
Je vais voir ca..je pense que ca résoudrait pas mal de mes problèmes.

Mais j'ai pas trop envie de le faire pour le site ou j'ai mon pb...le contenu est déjà renseigné en grande partie...je me vois pas tour reprendre pour passer en UTF8

Anyway, Mon pb reste que ma fonction et plus précisément le eregi_replace ne tient pas compte des mots avec des simples guillemets.

Par exemple:
eregi_replace("tata", "toto" , "taratata"); me renvoi bien "taratoto"
Par contre:
eregi_replace("t'ata", "toto" , "tarat'ata"); ne me renvoi pas "taratoto", mais toujours "tarat'ata"

J'ai essayé avec des addslashes, stripslashes, htmlentities, etc.., je ne trouve pas la solution.
J'avoue que tout ces problèmes de conversion me dépasse un peu.

Si vous aviez une piste pour m'aider dans mes recherches

Merci encore pour votre aide

Marco
pifoux a écrit :
Mais j'ai pas trop envie de le faire pour le site ou j'ai mon pb...le contenu est déjà renseigné en grande partie...je me vois pas tour reprendre pour passer en UTF8
Euh... quel rapport avec utf8 ? Il s'agissait juste de paramétrer FCKEditor pour qu'il ne génère pas d'entités.

Pour le reste je suis du même avis qu'Agylus. Je t'invite à essayer
str_replace (ou str_ireplace) :
echo str_replace("tata", "toto" , "taratata")." / ";
echo str_replace("t'ata", "toto" , "tarat'ata")." / ";
echo str_replace("t&quot;ata", "toto" , "tarat&quot;ata")." / ";
Ensuite il suffit donc d'avoir le même type de champ partout : soit tout est écrit avec des entités (bof), soit rien ne l'est (bien !). Le mieux serait sans doute de te débarrasser des entités une bonne fois pour toute (il suffit de faire une boucle PHP et de remplacer le contenu en question par sa valeur après l'avoir html_entity_decodée). Donc soit htmlentities, soit html_entity_decode.
Je me réponds...

J'ai suivi tes conseils, j'ai tout passé en UTF-8 et maintenant ca marche nickel

Merci à vous tous

Marco