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

使用PHP从html结构中提取电子邮件地址,php,joomla-community-builder,Php,Joomla Community Builder,我试图修改一个php文件,它是Joomla extension Community Builder 1.9.1的,文件是\components\com\u comprofiler\plugin\templates\default\default.php,以便从变量中提取电子邮件地址 <pre><?php print_r($html) ?></pre> 为了便于描述,假设这个变量是$html。为确保此变量是包含目标电子邮件地址的正确变量,我插入: 看起来htm

我试图修改一个php文件,它是Joomla extension Community Builder 1.9.1的,文件是\components\com\u comprofiler\plugin\templates\default\default.php,以便从变量中提取电子邮件地址

<pre><?php print_r($html) ?></pre>
为了便于描述,假设这个变量是$html。为确保此变量是包含目标电子邮件地址的正确变量,我插入:

看起来html输出的标记部分被替换为…,就像您在Chrome的开发工具html inspector中看到的一样,在展开它之前,html看起来像:

<?php $html_array = explode("\"",$this->tableContent[$userIdx][1][6]->value);echo $html_array[5]; ?>
为了避免链接,可以使用转义序列。 如果给定的字符串与电子邮件地址模式匹配,则可以使用正则表达式进行匹配并打印它 PHP对可以执行wierdest任务的函数有广泛的支持,所以搜索它们
要从您描述的HTML结构中提取电子邮件地址,只需使用regex和:

因此,要访问该电子邮件地址,只需执行以下操作:

产出将是:

myemail@yahoo.com

谢谢,先生,你能说得更具体一点吗?比如,如果我有一个值为foo的字符串,我如何让它按原样显示值,而不是浏览器已经解释过的值,这将是foo,只有一个链接我认为Jake的regex preg_match/,$html,$matches有一点变化;它将工作,因为它将返回给您完整的url另一件事处理escape Sequences所以我提供并回答,但我假设您正在解析HTML以获取电子邮件地址。但在编辑时仔细看你的文章,我不清楚问题是什么。您现在正在尝试查找传递到模板中的值吗?先生,您的回答很好,它确实帮助我学习了一些新技巧。但是关于我最初的问题,这里有一些更新,我将了解如何使用htmlspecialchars检查字符串值:如果我翻出\r$html,它将输出一个带有mailto链接的电子邮件地址,由一对span标记包装,正如你在我的主要帖子中看到的那样。但是如果我回显htmlspecialchars$html,它将只输出…,包含所需电子邮件地址的标记将替换为。。。。我完全无法理解这是怎么发生的。问题是\components\com\u comprofiler\plugin\templates\default\default.php是一个模板。您需要在PHP中获取在模板中设置该值的变量。非常感谢您的启发性回答。我测试了上面的代码,它在本地运行良好,但一旦我用实际的$this->tableContent[$userIdx][1][6]->值替换$html变量并将代码插入文件进行测试,输出是>数组>>,所以我想问题在于如何构造变量。毕竟,如果您的代码与实际文件一起工作,我使用explode的代码也应该工作。因此,现在我认为我的问题是如何打印包含html结构的字符串值,而不是浏览器已经解释的内容。只有这样,我才能更准确地了解$this->tableContent[$userIdx][1][6]->值包含的内容,并建立从中提取电子邮件地址的方法。
Array
(
    [0] =>  cbMa14768
    [2] =>  class=
    [3] => cbMailRepl
    [4] => >... 
)
<span id="cbMa47822" class="cbMailRepl">...</span>
<?php $html_array = explode("\"",$this->tableContent[$userIdx][1][6]->value);echo $html_array[5]; ?>
$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