Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3180 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Remplacer preg_replace par preg_replace_callback

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Remplacer preg_replace par preg_replace_callback

n°2262762
Dawa
www.shootmeagain.com
Posté le 19-07-2015 à 13:48:54  profilanswer
 

Hello  [:dawa]  
 
Depuis que j'ai installé une version plus récente de PHP j'ai un message d'erreur pour un de mes preg_replace :  
 

Code :
  1. $text = preg_replace("#\[img\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#sie", "'[img:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/img:$uid]'", $text);


 

Code :
  1. Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /Users/eriksma/Documents/Sites Web/newsma/bbcode.php on line 309


 
J'ai tant bien que mal essayé de réparer ça par moi-même en fouillant les interwebs :  
 

Code :
  1. $text = preg_replace_callback("#\[img\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#sie", create_function("$matches","return '[img:$uid]$matches[3]' . str_replace(' ', '%20', '$matches[3]') . '[/img:$uid]';" ), $text);


 
Mais ça ne passe pas :  
 

Code :
  1. Notice: Undefined variable: matches in /Users/eriksma/Documents/Sites Web/newsma/bbcode.php on line 311
  2. Notice: Undefined variable: matches in /Users/eriksma/Documents/Sites Web/newsma/bbcode.php on line 311
  3. Notice: Undefined variable: matches in /Users/eriksma/Documents/Sites Web/newsma/bbcode.php on line 311
  4. Warning: preg_replace_callback(): Modifier /e cannot be used with replacement callback in /Users/eriksma/Documents/Sites Web/newsma/bbcode.php on line 311
  5. Notice: Undefined variable: matches in /Users/eriksma/Documents/Sites Web/newsma/bbcode.php on line 311
  6. Notice: Undefined variable: matches in /Users/eriksma/Documents/Sites Web/newsma/bbcode.php on line 311
  7. Notice: Undefined variable: matches in /Users/eriksma/Documents/Sites Web/newsma/bbcode.php on line 311
  8. Warning: preg_replace_callback(): Modifier /e cannot be used with replacement callback in /Users/eriksma/Documents/Sites Web/newsma/bbcode.php on line 311


 
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 !  [:dawa]


---------------
SHOOT ME AGAIN WEBZINE
mood
Publicité
Posté le 19-07-2015 à 13:48:54  profilanswer
 

n°2262779
gilou
Modérateur
Modzilla
Posté le 19-07-2015 à 19:44:09  profilanswer
 

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2262848
dreameddea​th
Posté le 20-07-2015 à 19:39:06  profilanswer
 

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 :
  1. $text = preg_replace_callback(
  2.             "#\[img\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#si",
  3.             function($matches) {
  4.                      return '[img:$uid]'.$matches[1] . str_replace(' ', '%20', $matches[3]) . '[/img:$uid]';
  5.             },
  6.             $text);


???
(j'ai viré les guillemets simples autour du $matches[1] et $matches[3])
 
Cordialemnt,


Message édité par dreameddeath le 20-07-2015 à 19:40:48
n°2262852
gilou
Modérateur
Modzilla
Posté le 20-07-2015 à 21:45:35  profilanswer
 

> Il ne faudrait pas plutôt  ...
Oui, très certainement.
A+,


Message édité par gilou le 20-07-2015 à 21:46:07

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2262885
Dawa
www.shootmeagain.com
Posté le 21-07-2015 à 10:49:34  profilanswer
 

Hey merci beaucoup pour votre aide !  
 
Alors la solution de dreameddeath marche "presque" :D  
 
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 :
  1. [img:$uid]http://img4.hostingpics.net/pics/824347vistachino3.jpg[/img:$uid]


 
Alors qu'il devrait convertir ma variable  [:kolombin]  
 
Mais bon juste derrière j'ai ajouté ceci :  
 

Code :
  1. $text=str_replace("uid",$uid,$text);
  2. $text=str_replace("$","",$text);


 
Et ça fonctionne, même si c'est pas 100% propre nickel  [:boulax:4]  
 
Merci pour votre aide !  [:dawa]


---------------
SHOOT ME AGAIN WEBZINE
n°2262907
gilou
Modérateur
Modzilla
Posté le 21-07-2015 à 15:00:18  profilanswer
 

A la place de ceci:
    [img:$uid]http://img4.hostingpics.net/pics/824347vistachino3.jpg[/img:$uid]
Tu devrais avoir quoi?
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2262937
Dawa
www.shootmeagain.com
Posté le 21-07-2015 à 20:11:53  profilanswer
 

[img:80451215]http://img4.hostingpics.net/pics/824347vistachino3.jpg[/img:80451215] ou tout autre nombre aléatoire défini plus haut dans la fonction !


Message édité par Dawa le 21-07-2015 à 20:12:09

---------------
SHOOT ME AGAIN WEBZINE
n°2262946
gilou
Modérateur
Modzilla
Posté le 21-07-2015 à 22:53:44  profilanswer
 

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+,


Message édité par gilou le 21-07-2015 à 23:30:37

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Remplacer preg_replace par preg_replace_callback

 

Sujets relatifs
besoin d'aide pour script PHP[VBS] Find & replace avec une chaine contetant des guillemets
Conseils sur programmation PHPMail avec PHP- Fontion mail? ou SMTP?
Comparaison des moteurs PHPFormulaire de devis en PHP sur plusieurs pages web ?
[PHP] TableauRecuperation de variable JS en PHP
Requête SQL Update dans PHPAppel d'une autre page a partir d'une page HTML ou PHP
Plus de sujets relatifs à : [PHP] Remplacer preg_replace par preg_replace_callback


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR