Remplacer preg_replace par preg_replace_callback [PHP] - PHP - Programmation
Marsh Posté le 19-07-2015 à 19:44:09
Ben au vu de la doc, ça devrait être ceci, non?
$text = preg_replace_callback("#\[img\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#si",
function($matches) { return '[img:$uid]$matches[1]' . str_replace(' ', '%20', '$matches[3]') . '[/img:$uid]'; },
$text);
A+,
Marsh Posté le 20-07-2015 à 19:39:06
De mémoire, en php, les guillemets simples ['] désactivent la substitution des variables dans les chaines de caractères. Il ne faudrait pas plutôt
Code :
|
???
(j'ai viré les guillemets simples autour du $matches[1] et $matches[3])
Cordialemnt,
Marsh Posté le 20-07-2015 à 21:45:35
> Il ne faudrait pas plutôt ...
Oui, très certainement.
A+,
Marsh Posté le 21-07-2015 à 10:49:34
Hey merci beaucoup pour votre aide !
Alors la solution de dreameddeath marche "presque"
Alors je n'ai plus de notice, pas de message d'erreur et le replace se fait bien sauf que :
Le résultat qu'il me donne est par exemple :
Code :
|
Alors qu'il devrait convertir ma variable
Mais bon juste derrière j'ai ajouté ceci :
Code :
|
Et ça fonctionne, même si c'est pas 100% propre nickel
Merci pour votre aide !
Marsh Posté le 21-07-2015 à 15:00:18
A la place de ceci:
[img:$uid]http://img4.hostingpics.net/pics/824347vistachino3.jpg[/img:$uid]
Tu devrais avoir quoi?
A+,
Marsh Posté le 21-07-2015 à 20:11:53
[img:80451215]http://img4.hostingpics.net/pics/824347vistachino3.jpg[/img:80451215] ou tout autre nombre aléatoire défini plus haut dans la fonction !
Marsh Posté le 21-07-2015 à 22:53:44
Cette modification devrait alors marcher je pense:
...
function ($matches) use (&$uid) {
return '[img:' . $uid . ']'. $matches[1] . str_replace(' ', '%20', $matches[3]) . '[/img:' . $uid . ']';
},
...
EDIT:
Et en y repensant, celle ci devrait être encore plus simple:
$text = '[img:' . $uid . ']'. preg_replace_callback("#\[img\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#si",
function($matches) { return $matches[1] . str_replace(' ', '%20',$matches[3]); }, $text) . '[/img:' . $uid . ']';
ou en plus découpé:
$text = preg_replace_callback("#\[img\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#si",
function($matches) { return $matches[1] . str_replace(' ', '%20',$matches[3]); }, $text);
$text = '[img:' . $uid . ']'. $text . '[/img:' . $uid . ']';
Bref, au lieu de coller les [img:$uid] autour dans l'expression de remplacement, on fait le remplacement d'abord, et on colle les [img:$uid] autour ensuite.
A+,
Marsh Posté le 19-07-2015 à 13:48:54
Hello
Depuis que j'ai installé une version plus récente de PHP j'ai un message d'erreur pour un de mes preg_replace :
J'ai tant bien que mal essayé de réparer ça par moi-même en fouillant les interwebs :
Mais ça ne passe pas :
Bon le souci c'est que les expressions régulières c'est pas mon point fort et que ce preg_replace il vient d'un script tout fait pour convertir les bbcode... alors là je galère
Quelqu'un aurait une idée et serait assez cool pour me dépanner ?
Merci !
---------------
SHOOT ME AGAIN WEBZINE