Bonjour à tous
Voilà j'ai un soucie
J'ai lu et essayé de comprendre pour modifié mes preg_replace par des preg_replace_callback
Je n'i arrive pas donc si l'on pouvais me montré avec cette ligne comment modifié cela.
$bbcode = preg_replace("/\[right\]((\s|.)+?)\[\/right\]/", "<div align='right'>\\1</div>", $bbcode);

J'ai essayé un truc tout con, c'est sur cela ne fonctionne pas lol
$bbcode = preg_replace_callback("/\[right\]((\s|.)+?)\[\/right\]/", "<div align='right'>\\1</div>", $bbcode);


Si j'arrivais déjà a comprendre cela peux être arriverai-je a fairer les autres 300...

Merci par avance et désoler pour mon Orthographe et grammaire.
Modérateur
Salut,

djmanu68 a écrit :
J'ai lu et essayé de comprendre pour modifié mes preg_replace par des preg_replace_callback

T'es sur que tu as lu quelque chose ?
La seule chose que tu as fait ici c'est remplacer le nom de la fonction....

Tout est marqué dans la doc...
https://www.php.net/manual/fr/function.preg-replace.php
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed


https://www.php.net/manual/fr/function.preg-replace-callback.php
preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed

Le comportement de preg_replace_callback() est presque identique à celui de preg_replace(), hormis le fait qu'à la place du paramètre replacement, il faut spécifier une fonction de rappel callback qui sera appelée, avec les éléments trouvés en arguments.


Il y a même des exemples...
Bonjour merci de la réponse.
J'ai lu et je continue a être dans le flou
Parfois on est bête cela doit être mon cas, car malgré toute la lecture je n'arrive toujours pas a transcrire ce que je veux faire.
J'ai remplacer le preg_replace par preg_replace_callback et biensur j'ai une erreur

Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, '<div align='right'>\1</div>', 

Si je me suis permis d'écrire ici c'est parce-que cela fait 4 semaine que j’essaie par moi même mais bon je suis trop bête donc je demande de l'aide car cela est très loin de mon domaine.
Et étant donné que je vie en Alsace je préfère demander de l'aide ici.

Voilà c'est tout maintenant je vais continué a chercher peux être que dans 6 mois j'i y arriverais.

Merci quand même de m'avoir répondu
Modifié par djmanu68 (16 May 2019 - 01:32)
Modérateur
djmanu68 a écrit :
J'ai lu et je continue a être dans le flou
Parfois on est bête cela doit être mon cas, car malgré toute la lecture je n'arrive toujours pas a transcrire ce que je veux faire.
[...]
Si je me suis permis d'écrire ici c'est parce-que cela fait 4 semaine que j’essaie par moi même mais bon je suis trop bête donc je demande de l'aide car cela est très loin de mon domaine.
[...]
Voilà c'est tout maintenant je vais continué a chercher peux être que dans 6 mois j'i y arriverais.

Je ne pense pas que tu sois bête du tout, mais il y a une lacune.... soit au niveau de la lecture / compréhension d'une doc soit plus en amont au niveau des compétences en codage...
Par contre tu baisses bien vite les bras Smiley confus On a pas dit qu'on allait te laisser comme ça, on va te guider un peu plus loin mais il faudra être plus clair que ça sur ce que tu ne comprends pas.
Ici tu as juste remplacé le nom de la fonction et rien d'autre, tu n'as même pas essayé de changer les paramètre, ca donne juste l'impression que tu n'as pas cherché ni essayé plus loin que ça... désolé si c'est une fausse impression.

Revenons au problème.

djmanu68 a écrit :
J'ai remplacer le preg_replace par preg_replace_callback et biensur j'ai une erreur

Et bien oui, si tu ne respecte pas ce qu'il doit recevoir il ne peut pas marcher correctement.

La doc que je t'ai collé décrit le fonctionnement d'un code :
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed

Ici ça nous dit que la fonction preg_replace prend en paramètres un pattern un remplacement et un sujet.
Et c'est bien ce que tu fais non ?

$bbcode = preg_replace("/\[right\]((\s|.)+?)\[\/right\]/", "<div align='right'>\\1</div>", $bbcode);

le pattern : /\[right\]((\s|.)+?)\[\/right\]/
le remplacement : <div align='right'>\\1</div>
le sujet : $bbcode

Et bien il faut suivre la même logique pour toute les doc...
preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed

Et c'est même expliqué en toute lettre.

Le comportement de preg_replace_callback() est presque identique à celui de preg_replace(), hormis le fait qu'à la place du paramètre replacement, il faut spécifier une fonction de rappel callback qui sera appelée, avec les éléments trouvés en arguments.

Je ne peut pas mieux t'expliquer que ce qui a de marqué ici.... A la place du remplacement, on donne une fonction. Donc c'est le meme code sauf qu'a la place du remplacement il y a une fonction. Il y a même des exemples en dessous.

Qu'est-ce que tu n'arrives pas a comprendre ici ?
Hello je n'abandonne pas car je doit trouver la solution

function format_comment($text) {
	global $site_config, $smilies;
	$bbcode = $text;
	$bbcode = htmlspecialchars($bbcode);
	$bbcode = format_urls($bbcode);
     $bbcode = preg_replace("/\[right\]((\s|.)+?)\[\/right\]/", "<div align='right'>\\1</div>", $bbcode);

	return $bbcode;
}

donc cela devrais donner


function format_comment($text) {
	global $site_config, $smilies;
	$bbcode = $text;
	$bbcode = htmlspecialchars($bbcode);
	$bbcode = format_urls($bbcode);
     $right ="<div align='right'>$bbcode</div>";
     $bbcode = preg_replace_callback("/\[right\]((\s|.)+?)\[\/right\]/", "format_comment", $right );

	return $bbcode;
}

si je fait cela tout ce retrouve a droite même sans le tag demander
Modifié par djmanu68 (19 May 2019 - 21:21)
Autre Test
	
function vers_right($match) {return '<div align="right">'.$match.'</div>';   }
   $bbcode = preg_replace_callback("/\[right\]((\s|.)+?)\[\/right\]/", "vers_right", $bbcode );


erreur
Fatal error: Cannot redeclare vers_right() (previously declared in /home/www/functions.php:871)
Modifié par djmanu68 (19 May 2019 - 21:43)
Je crois que je vient de trouver
la fonction est a l’intérieur de la fonction c'est vraiment pas claire leur explication mais cela a l'air de fonctionner
$bbcode = preg_replace_callback("/\[right\]((\s|.)+?)\[\/right\]/", function ($droite) { return '<div align="right">'.$droite[1].'</div>'; }, $bbcode );

C'est cela ou pas?
Modifié par djmanu68 (19 May 2019 - 23:21)
Modérateur
Salut,

Et bien a toi de nous dire si ca marche bien ! Smiley lol

Ca a l'air correct en tout cas, par contre, qu'est-ce que tu cherche a faire exactement ? Et pourquoi remplacer preg_replace par preg_replace_callback ?
Modérateur
djmanu68 a écrit :
Je passe mon site de php 5.6 à php 7

preg_replace ne semble pas déprécié en php7 du moment que tu n'utilises pas l'option \e... tu avais des erreurs avec le preg_replace normal ?
Hello oui des erreur
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/******.php on line 885

Pour cela que je me suis amuser a modifié le tout.

Merci encore