Question

Je veux remplacer tous les « mailto: » liens en html avec des e-mails simples.

In: text .... <a href="mailto:somebody@example.org">not needed</a> text
Out: text .... somebody@example.org text

Je l'ai fait:

$str = preg_replace("/\<a.+href=\"mailto:(.*)\".+\<\/a\>/", "$1", $str);

Mais il échoue s'il y a plusieurs e-mails en chaîne ou html dans « une » balise

In: <a href="mailto:hello@somedomain.org">not needed</a><a href="mailto:somebody@example.org"><font size="3">somebody@example.org</font></a>
Out: somebody@example.org">
Était-ce utile?

La solution

Faites votre correspondance non gourmand en ajoutant ? à quantificateurs + et * comme:

$str = preg_replace("/\<a.+?href=\"mailto:(.*?)\".+?\<\/a\>/", "$1", $str);

échapper, vous devez également pas < et > et comme il y a une / dans le modèle de son mieux d'utiliser un séparateur différent et puisque vous ne faites pas une interpolation variable à l'intérieur du motif, il n'y a pas besoin de l'enfermer dans " cette vous évitez ainsi échapper à " l'intérieur du motif:

$str = preg_replace('#<a.+?href="mailto:(.*?)".+?</a>#', "$1", $str);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top