очистить адреса электронной почты

fff.html - это электронное письмо с адресами электронной почты, в некоторых из них есть ссылки href mailto, а в некоторых нет, я хочу очистить их и вывести в следующем формате.

[email protected],[email protected],[email protected]

У меня есть простой скребок, чтобы получить те, которые связаны с href, но что-то странное

  <?php
    $url = "fff.html";
    $raw = file_get_contents($url);

    $newlines = array("\t","\n","\r","\x20\x20","\0","\x0B");
    $content = str_replace($newlines, "", html_entity_decode($raw));

    $start = strpos($content,'<a href="mailto:');
    $end = strpos($content,'"',$start) + 8;
    $mail = substr($content,$start,$end-$start);

    print "$mail<br />";
    ?>

Я должен получить дополнительные баллы за оригинальное использование lorem ipsum


person Dasa    schedule 12.08.2010    source источник


Ответы (1)


Проблема в том, что если у вас есть более одного адреса электронной почты на HTML-странице. substr вернет только первый экземпляр. Вот скрипт, который будет анализировать все адреса электронной почты. Возможно, вам придется настроить его для вашего использования. Он выведет результаты в запрошенной вами форме CSV.

<?php
$url = "fff.html";
$raw = file_get_contents($url);

$newlines = array("\t","\n","\r","\x20\x20","\0","\x0B");
$content = str_replace($newlines, "", html_entity_decode($raw));

$start = strpos($content, '<body>');
$end = strpos($content, '</body>');
$data = substr($content, $start, $end-$start);

$pattern = '#a[^>]+href="mailto:([^"]+)"[^>]*?>#is';
preg_match_all($pattern, $data, $matches);

foreach ($matches[1] as $key => $email) {
    $emails[] = $email;
}
echo implode(', ', $emails );
?>
person Chuck Burgess    schedule 12.08.2010