Bonjour,
J'ai à ma disposition des liens "mailto" parser avec des balises différentes de html.
Dans mon cas cela ressemble à ça:
[mailto:toto@domaine.com|Toto]
et je suis donc sencé obtenir ça
<a href="mailto:toto@domaine.com">Toto</a>
Voila le code que j'ai actuellement (et qui ne fonctionne pas):
Lorsque j'execute mon code, php me retourne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $ma_chaine = "[mailto:toto@domaine.com|Toto]"; $reg ='/\[mailto:(.*)\]/e'; $replacement = "$mail = explode('|',$1); $addr = substr($mail[0],1); $nom = substr($mail[1], 0, -1); echo \"<a href=\"$addr\">$nom</a>\";"; $ma_chaine = preg_replace($reg, $replacement, $ma_chaine); echo $ma_chaine;
"Notice: Undefined variable: $mail, $addr, $nom" (j'ai abrégé)
"Parse error: parse error in test.php(num_ligne_dans_source): regexp code on line 1"
"Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Failed evaluating code: = explode('|',toto@domain.com|Toto); = substr(,1); = substr(,0,-1); .... in test.php(num_ligne_dans_source) on line 35"
J'en déduis donc que ne connaissant pas les variables, il ne peut les traiter (explode, substr, ...).
L'option "e" permet d'après la doc php d'interpréter du code php après remplacement si j'ai bien compris ça:
Seulement ...e (PREG_REPLACE_EVAL)
Avec cette option, preg_replace() effectue la substitution normale des références arrières dans la chaîne de remplacement, puis l'évalue comme un code PHP, et utilise le résultat pour remplacer la chaîne de recherche. Les guillemets simples, les guillemets doubles, les antislashs et les caractères NULL sont protégés avec des antislashs (\) dans les références arrières substituées.
Seule preg_replace() utilise cette option. Elle est ignorée par les autres.
Est-ce que le problème vient du seul fait que mes variables sont indéfinies ? si oui comment corriger cette erreur ?
Merci
Partager