[Résolu] extraire une partie d'un email

Bonjour,

Je souhaiterais extraire la partie d’un email à gauche du signe @.
Comme |explode renvoie un tableau, j’essaie de récupérer la 1° partie

#SET{my_array, #GET{email}|explode{@}}
#GET{my_array/0}

Mais je dois faire une erreur de codage, ça ne marche pas.

Merci de vos lumières

Le filtre |table_valeur - SPIP est ton ami sur ce coup là.

Mais tu peux aussi le faire la fonction PHP PHP: strstr - Manual

Directement avec le filtre |match - SPIP :

[(#GET{email}|match{^(.*)@,1})]

Merci à vous 2,

Je suis dans la configuration particulière d’un modèle.html inclus dans /squelettes qui est appelé par newsletters.
Je dois donc échapper toutes les commandes SPIP : \#ENV{email}
Mais \[(#GET{email}|match{^(.*)@,1})] me renvoie [(|match{^(.*)@,1})]

Je ne sais pas comment m’en sortir…

Comportement très bizarre dans une boucle.

J’ai essayé la solution de b_b à l’intérieur de la boucle

<?php
$email = '\#ENV{email}';
$domaine = strstr($email, '@');
$user = strstr($email, '@', true);
echo 'le mail est : '.$email.'<br />'; 
echo 'le domaine est : '.$domaine.'<br />'; 
echo 'le nom est : '.$user ;
?>

mais je n’obtiens que des réponses partielles :

le mail est : ab.cd@yz.fr
le domaine est : (vide)
le nom est : (vide)

Je ne comprends pas le hic

Tu ne mélangerais pas #ENV{email} et #GET{email} dans le |match ?

Que je mette #GET{email] ou #ENV{email} dans le |match ne change rien. Je n’obtiens rien.
Alors que, ailleurs dans la boucle, \#ENV{email} me renvoie bien un email.

Alors que si je mets un email en dur

<BOUCLE_news()>
<?php
$email = 'ab.cd@yz.fr';
$domaine = strstr($email, '@');
$user = strstr($email, '@', true);
echo 'le mail est : '.$email.'<br />'; 
echo 'le domaine est : '.$domaine.'<br />'; 
echo 'le nom est : '.$user ;
?>
</BOUCLE_news>

j’obtiens bien dans ma boucle les réponses attendues :

le mail est : ab.cd@yz.fr
le domaine est : @yz.fr
le nom est : ab.cd

Une idée ?

Bon,

J’ai bien galéré mais j’ai réussi à débloquer la situation.
Merci pour vos suggestions qui m’ont mis sur la piste.

Login : <b> \#ENV{nom} &nbsp;</b><br />
Votre mot de passe <u>provisoire</u> : <b>[(\#ENV{email}|match{^(.*)@,1})]_1</b>

:grinning: