Разделение адресов электронной почты, разделенных запятыми, в строку с запятыми в кавычках

#php #split

#php #разделение

Вопрос:

Допустим, у меня есть следующие адреса электронной почты, разделенные запятыми в строке:

 $addrList = 'Kevin.Brine@pppg.com, Robert.Thomas@pppg.com, "Guice, Doug" <Doug.Guice@pppg.com>';
  

Мне нужен следующий результат:

 [0] => Kevin.Brine@pppg.com
[1] => Robert.Thomas@pppg.com
[2] => "Guice, Doug" <Doug.Guice@pppg.com>
  

Кажется довольно простым, но эта запятая в имени, заключенном в кавычки, действительно заставила меня попытаться найти решение, используя либо preg_match_all, либо preg_split. Также мы должны учитывать электронные письма, которые также используют одинарные кавычки для имен, т. Е.: 'smith, tom' <tom.smith@abc.com>

Ответ №1:

str_getcsv() должна дать вам то, что вам нужно, хотя при этом будут удалены кавычки.

Редактировать

Если вы хотите поместить кавычки обратно в:

 $addrList = 'Kevin.Brine@pppg.com, Robert.Thomas@pppg.com, "Guice, Doug" <Doug.Guice@pppg.com>';


$t = str_getcsv($addrList);

foreach($t as $k => $v) {
    if (strpos($v,',') !== false) {
        $t[$k] = '"'.str_replace(' <','" <',$v);
    }
}

var_dump($t);
  

Комментарии:

1. Отличная идея — Я только что попробовал это, и я теряю фактический адрес электронной почты в последней записи в строке — я получаю только имя: Guice, Doug. Есть идеи? Спасибо!

2. Вы повторяете это в веб-браузере, не так ли! Как браузер реагирует, когда видит <что угодно>? Попробуйте вместо этого выполнить var_dump()

3. О, ты так хорош. Я полностью пропустил это! Большое спасибо!!

4. Обычно я работаю в Zend Studio 5.5 (по-моему, это всего лишь php 5.1) — но поскольку str_getcsv() работает на php 5.3 , я просто запустил его со своего сервера и браузера (как вы и сказали!) и полностью забыл об эффекте тега! Еще раз спасибо!