preg_remplace dans un preg_replace ? ^^

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : preg_remplace dans un preg_replace ? ^^

par nairolf287 » 04 sept. 2007, 16:43

Toutafé :)

mais regarde quand même du coté de la fonction callback proposée par Ripat, sans doute plus simple à utiliser que l'option eval
Oui je vais y jeter un coup d'oeil encore merci pour toutes ces infos :wink:

par Ryle » 04 sept. 2007, 16:41

Toutafé :)

mais regarde quand même du coté de la fonction callback proposée par Ripat, sans doute plus simple à utiliser que l'option eval

par nairolf287 » 04 sept. 2007, 16:36

C'est pas un appel, c'est une chaine de caractère que php va évaluer comme une instruction puisque l'option "e" est spécifiée :)
En gros il évalue la chaine 'remplace_code("$1")' et exécute l'instruction remplace_code("$1")
Ah d'accord ! Je n'avais pas compris.

Encore une question du debutant, l'option e est specifiée à quelle endroit ? :D

Edit sur #Use je crois nan ? :?

voila j'ai fait avec l'option e ça à l'air de marcher tres bien, merci beaucoup :D

par Ryle » 04 sept. 2007, 16:34

C'est pas un appel, c'est une chaine de caractère que php va évaluer comme une instruction puisque l'option "e" est spécifiée :)
En gros il évalue la chaine 'remplace_code("$1")' et exécute l'instruction remplace_code("$1")

par Ripat » 04 sept. 2007, 16:32

C'est pas tres juste d'appeler la fonction entre " " ou ' ' nan ?
Je ne sais pas ce que tu appelles "juste" mais en tout cas, les deux lignes de code que je t'ai données plus haut sont conformes et correctes - à défaut d'être lisibles!

par nairolf287 » 04 sept. 2007, 16:22

En plus des raisons de sécurité que tu évoques, j'ai toujours détesté preg_replace() option e pour la difficulté d'utiliser les références arrières et l'utilisation "spéciale" des guillemets.

Dans ton cas, essaye:
preg_replace('#ton_motif#Use', 'remplace_code("$1")', $texte);

// ou

preg_replace('#ton_motif#Use', "remplace_code('$1')", $texte);
C'est pas tres juste d'appeler la fonction entre " " ou ' ' nan ?
Je vais me renseigner peut etre pour preg_replace_callback

par Ripat » 04 sept. 2007, 16:14

En plus des raisons de sécurité que tu évoques, j'ai toujours détesté preg_replace() option e pour la difficulté d'utiliser les références arrières et l'utilisation "spéciale" des guillemets.

Dans ton cas, essaye:
preg_replace('#ton_motif#Use', 'remplace_code("$1")', $texte);

// ou

preg_replace('#ton_motif#Use', "remplace_code('$1')", $texte);
Je te recommande chaudement de plutôt te tourner vers la fonction preg_replace_callback(), bien plus facile à gérér et souvent beaucoup plus rapide.

Voir tuto PHPFrance

par nairolf287 » 04 sept. 2007, 13:24

Merci, je n'avais meme pas penser à faire fonction("$1"); ^^

Je vais tester ça et vous dis si ca marche :wink:

Edit : En théorie ca devrait fonctionné seulement $1 n'a pas l'ai d'etre considéré comme une variable et si je fait une fonction par exemple :
function remplace_code($code) {
	echo $code;
return true ;
}
Que j'aplique sur $1 ( remplace_code("$1") ) il me renvoie tout simplement $1 en texte et pas son contenu ^^.

J'ai essayé de lever les " " mais là ça bug car $1 est invalide à cause du numéro.
Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in ...
Peut etre que la solution est de remplacer la variable $1 en vrai variable mais la encore je ne sais pas :roll:

PS : Pour l'option "e" je n'ai aps tres bien compris comment elle marchait ^^ mais j'ai vu qu'elle était déconseillée :?

par Ryle » 04 sept. 2007, 12:56

J'ai un doute et rien pour vérifier la tout de suite mais si ton expression de remplacement est quelque chose du genre "xxx" . fonction("$1") . "xxx", je ne sais plus si ca fonctionne ou pas.

Sinon tu peux utiliser l'option "e" des expressions régulières, ce qui aura pour effet d'évaluer le code et il te suffira donc d'écrire la chaine a évaluer avec l'appel à la fonction :)

preg_remplace dans un preg_replace ? ^^

par nairolf287 » 04 sept. 2007, 12:04

Bonjour, je suis en train de créé une fonction me permettant de gérer des bbcodes.

Dans cette fonction j'arrive à la balise code qui d'apres mon code devrait figurer comme ça sur ma page au final :

Code : Tout sélectionner

<ol class="code"> <li>Lorem ipsum dolor sit amet</li> <li>consectetuer adipiscing elit</li> <li>Aliquam lacinia blandit arcu</li> <li>Nullam mollis, libero vitae scelerisque posuere, eros risus pellentesque nisi</li> <li>sed gravida mi nisi id dolor. Mauris nec massa at mi venenatis iaculis</li> </ol>
Et sur ma page php dans la fonction appelée :

Code : Tout sélectionner

[code]Lorem ipsum dolor sit amet consectetuer adipiscing elit Aliquam lacinia blandit arcu Nullam mollis, libero vitae scelerisque posuere, eros risus pellentesque nisi sed gravida mi nisi id dolor. Mauris nec massa at mi venenatis iaculis
[/code]

J'arrive tres bien à remplacer les balise Code, mon probleme est que à chauque saut de ligne à l'interieur de ses balise il faut qu'il soit remplacé par un élément de liste <li></li>.

J'ai donc essayé :

Code : Tout sélectionner

$remplace = preg_replace('#\[code](.+?)\
#si','</p><ol class="code"><li>' . preg_replace('/\n/', '</li><li>', '$1') . '</li></ol><p>',$remplace);[/code]

Mais seul la premiere fonction preg_replace fonctionne, la deuxieme est comme ignorée est affiche le code suivant :

Code : Tout sélectionner

<ol class="code"> <li>Lorem ipsum dolor sit amet consectetuer adipiscing elit Aliquam lacinia blandit arcu Nullam mollis, libero vitae scelerisque posuere, eros risus pellentesque nisi sed gravida mi nisi id dolor. Mauris nec massa at mi venenatis iaculis</li> </ol>
Comment faire pour appliqué une fonction sur ce fameux $1 ou \\1 ?


PS : Je savais pas si Debuter en php ou PHP 4 convenait le mieux ^^ comme je me considère comme debutant je met ici.