Domanda

Voglio sostituire tutte le "mailto:" link in html con e-mail di pianura.

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

Ho fatto questo:

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

Ma non riesce se ci sono più messaggi di posta elettronica in stringa o html all'interno di "un" tag

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">
È stato utile?

Soluzione

Fai la tua partita non avido con l'aggiunta di ? a quantificatori + e * come:

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

Inoltre non è necessario fuggire < e > e poiché ci sono alcuni / nel modello è meglio utilizzare un delimitatore diverso e dal momento che non sta facendo alcuna interpolazione variabile all'interno del modello, non v'è alcuna necessità di racchiuderlo tra " questo modo si può evitare la fuga " all'interno del modello:

$str = preg_replace('#<a.+?href="mailto:(.*?)".+?</a>#', "$1", $str);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top