使用PHP从html结构中提取电子邮件地址

时间:2014-06-06 20:18:58

标签: php joomla-community-builder

我正在尝试修改一个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]; ?>

Io get 'mailto:myemail@yahoo.com';但实际上它只返回通知:

  

未定义的偏移量:5

所以我print_r($html_array),它会返回类似

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

看起来html输出的<a>标记部分被"..."替换,就像您在Chrome的开发人员工具html检查器中看到的那样,在展开它之前,HTML看起来像:< / p>

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

我深入研究了php代码,试图找出这个$html是如何构建的,但这完全超出了我的理解。

出于学习目的,我的问题是:

  1. 为什么[1]

  2. 的结果中没有print_r($html_array)
  3. 如何更准确地测试变量的值,更确切地说,我的意思是完全没有html输入,如果值为"<a href="htt://foo.com">foo</a>",则应该按原样显示HTML,而不是链接(当我使用print_r时,它会返回一个链接)?

  4. 最重要的是,根据上面给出的信息,您能否提供一些关于如何从这样的变量中提取电子邮件地址的提示?

  5. 最后,对于那些愿意深入研究这个问题的人来说,我所谈论的变量是$this->tableContent[$userIdx][1][6]->value中的\components\com_comprofiler\plugin\templates\default\default.php,原来它不在代码中但我做了一些测试并确认它包含电子邮件地址。我在第450行和第450行之间插入了以下代码: 451

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

2 个答案:

答案 0 :(得分:0)

如您所述,要从HTML结构中提取电子邮件地址,只需使用正则表达式和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 :(得分:-1)

  1. 要避免链接,您可以使用转义序列。
  2. 如果给定的字符串与电子邮件地址模式匹配并打印,则可以使用正则表达式进行匹配
  3. PHP对可以执行最奇怪的任务以便搜索它们的函数提供了大量支持
相关问题