Извлечение адреса электронной почты из структуры HTML с использованием PHP

Я пытаюсь изменить файл php (это расширение Joomla Community Builder 1.9.1и файл \components\com_comprofiler\plugin\templates\default\default.php), чтобы извлечь адрес электронной почты из переменной.

Для описания, скажем, эта переменная $html, Чтобы убедиться, что эта переменная является правильной и содержит адрес электронной почты, на который я нацеливаюсь, я вставляю:

<pre><?php print_r($html) ?></pre>

В файл и его вывод входит адрес электронной почты со ссылкой mailto, а соответствующий HTML-код выглядит как

<span id="cbMa47822" class="cbMailRepl"><a href="mailto:myemail@yahoo.com">myemail@yahoo.com</a></span>

Итак, я думаю, я могу использовать:

<?php $html_array = explode("\"",$html);echo $html_array[5]; ?>

Ио получить 'mailto:myemail@yahoo.com'; Но на самом деле это только возвращает уведомление о:

неопределенное смещение:5

Так что я print_r($html_array)и вернуть что-то вроде

Array
(
    [0] =>  cbMa14768
    [2] =>  class=
    [3] => cbMailRepl
    [4] => >... 
)

Похоже, <a> часть тега вывода html заменяется "..."Как и в HTML-инспекторе инструмента разработчика Chrome, где перед расширением HTML выглядит так:

<span id="cbMa47822" class="cbMailRepl">...</span>

Я посмотрел глубже в коде PHP, пытаясь выяснить, как это $html построен, но это совершенно за пределами моего понимания.

В целях обучения мои вопросы:

  1. почему нет [1] в результате print_r($html_array)

  2. Как мне более точно проверить значение переменной, точнее говоря, я имею в виду полностью без ввода html, например, если значение "<a href="htt://foo.com">foo</a>", если должен отображать HTML как есть, но не ссылку (когда я использую print_r, это возвращает ссылку)?

  3. И самое главное, основываясь на приведенной выше информации, можете ли вы дать мне какой-нибудь намек относительно того, как я могу извлечь адрес электронной почты из такой переменной, как эта?

Наконец, для тех, кто хочет глубже взглянуть на это, переменная, о которой я говорю, $this->tableContent[$userIdx][1][6]->value в \components\com_comprofiler\plugin\templates\default\default.phpПервоначально его не было в коде, но я проверил и подтвердил, что он содержит адрес электронной почты. Я вставил следующий код между строкой 450 и 451

<?php $html_array = explode("\"",$this->tableContent[$userIdx][1][6]->value);echo $html_array[5]; ?>

2 ответа

Чтобы извлечь адрес электронной почты из HTML-строки, как вы описываете, просто используйте regex и preg_match:

$html = '<span id="cbMa47822" class="cbMailRepl"><a href="mailto:myemail@yahoo.com">myemail@yahoo.com</a></span>';

preg_match("/mailto:(.*)\">/is", $html, $matches);

echo '<pre>';
print_r($matches);
echo '</pre>';

Выход будет:

Array
(
    [0] => mailto:myemail@yahoo.com">
    [1] => myemail@yahoo.com
)

Чтобы получить доступ к этому адресу электронной почты, просто сделайте это:

echo $matches[1];

Выход будет:

myemail@yahoo.com
  1. Чтобы избежать ссылок, вы можете использовать escape-последовательность.
  2. Вы можете использовать регулярное выражение, чтобы соответствовать, если данная строка соответствует шаблону адреса электронной почты и распечатать его
  3. PHP имеет обширную поддержку функций, которые могут выполнять самые сложные задачи, поэтому ищите их
Другие вопросы по тегам