Pergunta

Quero substituir todos os links "Mailto:" no HTML por e -mails simples.

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

Eu fiz isso:

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

Mas falha se houver vários e -mails em string ou html dentro da tag "A"

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">
Foi útil?

Solução

Faça sua partida não-greedy adicionando ? para quantificadores + e * Como:

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

Também você não precisa escapar < e > E já que existem alguns / No padrão, é melhor usar um delimitador diferente e, como você não está fazendo nenhuma interpolação variável dentro do padrão, não há necessidade de envolvê -lo " Dessa forma, você pode evitar escapar " Dentro do padrão:

$str = preg_replace('#<a.+?href="mailto:(.*?)".+?</a>#', "$1", $str);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top