8722 sujets

Développement web côté serveur, CMS

Bonjour.

J'ai un souci avec un fichier codé en php 5.3 alors que tout le reste est en php7.0.2 et je me trouve confronté a cette erreur que je n'arrive pas à resoudre.

$sentence=preg_replace('/~([^<>]{1,})~/e', "'<span class=\"helpstart\">'.UTF8_strtoupper('\\1').'</span>'", $sentence);

j'obtiens l'erreur:
:

ERROR 2: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
Modérateur
Bonjour,

Pour des raisons de sécurité cette possibilité a été enlevée, vous ne pouvez plus utiliser \\1 pour traiter directement le résultat de preg_replace en son sein même.

C'est pourquoi il est indispensable de passer par preg_replace_callback() qui permet d'utiliser une fonction de rappel.

Je vous invites à consulter ce sujet sur Stackoverflow qui décrit très bien le phénomène et pour lequel IMSoP (c'est son pseudonyme) fournit la contre-offensive à ce problème.
Bonjour.

Le titre de ce 'fil' est tendancieux : il laisse penser que c'est la fonction 'preg_replace' qui est dépréciée... (/e, je ne connaissais pas...)
Modérateur
Zelena a écrit :
Bonjour.

Le titre de ce 'fil' est tendancieux : il laisse penser que c'est la fonction 'preg_replace' qui est dépréciée... (/e, je ne connaissais pas...)

C'est aussi ce qui m'a interloqué. Smiley sweatdrop
C'est pas spécifique à php 7 Smiley cligne depuis php 5.5 le \e est déprécié Smiley smile

Si j'ai bien compris voici ce qui le remplace dans ton cas


$sentence = preg_replace_callback('/~([^<>]{1,})~/', function ($m) {
        return "'<span class=\"helpstart\">'.UTF8_strtoupper($m[1]).'</span>'";
    }, $sentence);


L'élément trouvé se trouve dans $m Smiley cligne
Modifié par pchlj (10 Feb 2017 - 13:45)
Merci pour ces reponses.
le code fourni par "pchlj" fonctionne tres bien.
Mais j'ai un autre probleme plus loin avec la fonction: " eval() " , là je ne comprends rien