Извлечение адреса электронной почты из структуры 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]
в результатеprint_r($html_array)
Как мне более точно проверить значение переменной, точнее говоря, я имею в виду полностью без ввода html, например, если значение
"<a href="htt://foo.com">foo</a>"
, если должен отображать HTML как есть, но не ссылку (когда я используюprint_r
, это возвращает ссылку)?И самое главное, основываясь на приведенной выше информации, можете ли вы дать мне какой-нибудь намек относительно того, как я могу извлечь адрес электронной почты из такой переменной, как эта?
Наконец, для тех, кто хочет глубже взглянуть на это, переменная, о которой я говорю, $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
- Чтобы избежать ссылок, вы можете использовать escape-последовательность.
- Вы можете использовать регулярное выражение, чтобы соответствовать, если данная строка соответствует шаблону адреса электронной почты и распечатать его
- PHP имеет обширную поддержку функций, которые могут выполнять самые сложные задачи, поэтому ищите их