Masque pattern/expression régulière exclusivement dans une balise HTML

Masque pattern/expression régulière exclusivement dans une balise HTML - Perl - Programmation

Marsh Posté le 04-12-2002 à 23:39:59    

en php (je sais, c'est dans la sous-cat perl mais les expression régulière ayant pour origine le perl, et ke ici c'est pas trop un blem de php je met la ;) ) , je traite une variable (ki contient du texte avec du html) pour convertir tout les caractères spéciaux de l'html
 
le problème est ke ça convertit en même temps les balises html, donc les <, > et "
pour les < et > c'est réglé
mais pour les " je coince :/
 
voici ce ke j'utilise pour l'instant pour traiter les " :
 
$contenu=preg_replace('/<(.*?)&(quot|#34);(.*?)&(quot|#34);(.*?)>/si', '<\\1"\\3"\\5>', $contenu);
 
pour une valeur de contenu du genre $contenu="test test <a href="http://www.google.fr"> test test"
le resultat obtenu est "test test <a href="http://www.google.fr"> test test"
donc la ça marche :)
 
mais pour $contenu="test test <a href="http://www.google.fr" target="_blank"> test test"
ça me donne "test test <a href="http://www.google.fr" target="_blank"> test test"
donc la problème puisque les " du target ne sont pas traduit en " :/
 
j'ai essayé d'ajouter un multiplicateur au masque mais je me perd complétement dans la syntaxe des masques :(


Message édité par Deadog le 04-12-2002 à 23:42:30
Reply

Marsh Posté le 04-12-2002 à 23:39:59   

Reply

Marsh Posté le 05-12-2002 à 00:35:45    

En gros, ton problème c'est que la recherche de motif n'est exécutée qu'une seule fois...
 
Je sais qu'en perl il existe l'option g pour ne pas limiter la recherche à la première occurence trouvée (ex: s/\s+/ /g), mais en php... :??:

Reply

Marsh Posté le 05-12-2002 à 00:40:12    

Solution temporaire de goret:
Tu fais une boucle sur ton replace jusqu'à ce que la sortie soit identique à l'entrée...


Message édité par Toucouch le 05-12-2002 à 00:40:31
Reply

Marsh Posté le 05-12-2002 à 16:19:05    

Toucouch a écrit a écrit :

Solution temporaire de goret:
Tu fais une boucle sur ton replace jusqu'à ce que la sortie soit identique à l'entrée...




 
 
la sortie je la connais pas ! les expl ct ce ke je voulais, étant donné ke c'est du texte pas fixe du tout (script de news) je ne peux connaitre la sortie k'après le traitement ;)
 
je vais essayer l'option g, dans le php ce sont des masques PCRE, pas très différent de ceux de perl :)

Reply

Marsh Posté le 06-12-2002 à 19:27:16    

l'option g marche po :(

Reply

Marsh Posté le 06-12-2002 à 19:35:32    

houla! comment tu te compliques la vie!
 
Déjà, je ne comprend pas pourquoi tu limites ta recherche de guillemet uniquement entre balises, ensuite, pourquoi il faut que ton expression commence par une balise.
 
Donne un peu le context général, je suis sur qu'il y a moyen de faire qqch de bien plus efficace.

Reply

Marsh Posté le 06-12-2002 à 19:48:15    

je veux uniquement dans des balises html pke je veux ke les " du texte normal soit traduit en caractères html normaux ( " ) mais évidament, des " dans des balises ça marche pas :pfff:  
 
et mon expression commance par une balise pke c'est dans las balises ke je veux enlever les " :D
 
 
le contexte c'est ke c'est un système de news ke j'avais fait y'a qql temps mais j'avais pas penser aux caractères spéciaux au moment de la création
du cout j'ai une base de plus de 1000 news avec des caractères spéciaux dedans
j'ai 2 solutions :
-où c'est basta pour les anciennes news et je met mon changement de caract spéciaux au moment ou on post la news (pas d'html à ce moment la, c'est de l'ubb)
-où je prend en compte les anciennes news et met un filtre ki se charge de traduire les caract spéciaux au moment de l'affichage de la news
 
j'ai choisie la 2ème soluce, pour traduire les caract spéciaux j'utilise htmlentities($mavar, ENT_QUOTES); et après je cherche à retraduire les " dans les balises html
 
 
je sais ke invoquer htmlentites + une fonction de filtre à chaque affichage de news c'est pas génial génial, mais je veux ke les anciennes news de contienne pas de caract spéciaux non traduit
j'ai aussi une 3ème soluce, faire un script ki traduit toutes les anciennes news et mettre mon htmlentites au moment du postage de la news, mais on en reviens au même problèmes : il faut éviter les " dans les balises :D :gun:

Reply

Marsh Posté le 06-12-2002 à 20:31:12    


vive l'unicode \o/

Reply

Marsh Posté le 07-12-2002 à 11:49:08    

OK. Ben, perso, j'aurais opté pour la 3ème solution. En effet, tu n'a pas tellement de balise qui contiennent des arguments, leur remplacement sera donc assez facile. A savoir:
 
1° une passe pour remplacer toutes les balises avec attribut en code BB
2° une transformation de tous les " restants en "
3° appliquer lors de l'affichage des news le même code BB que pour les nouvelles news.
 
Ca sera moins gourmand en ressource que l'autre. Parce que je vois bien comment retrouver toutes les occurences d'attribut dans une balise, mais pas comment les remplacer avec cette fonction.

Reply

Marsh Posté le 07-12-2002 à 15:55:32    

ok
 
sinon j'ai trouvé une 4ème solution
 
en faite si je voulais faire ça c pke sous certains navigateur avec certaines polices ça passé pas bien les caract spéciaux
mais en mettant
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
ça passe mieux :ange:  
 
je ferais la convertion des caract spéciaux dans la base lors du prochain gros changement du site, mettenant c'est plus trop urgent :p :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed