Замена <a href = "mailto: просто адресом электронной почты - PullRequest
1 голос
/ 27 марта 2010

Я хочу заменить все ссылки "mailto:" в html на обычные электронные письма.

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

Я сделал это:

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

Но происходит сбой, если в строке или html несколько тегов внутри тега "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">

1 Ответ

3 голосов
/ 27 марта 2010

Сделайте ваше совпадение нежадным , добавив ? к квантификаторам + и * как:

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

Также вам не нужно экранировать < и >, и, поскольку в шаблоне есть /, лучше использовать другой разделитель, и поскольку вы не выполняете никакой интерполяции переменных внутри шаблона, в этом нет необходимости. чтобы заключить его в " таким образом, вы можете избежать экранирования " внутри шаблона:

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