我正在尝试修改一个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]
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行和第450行之间插入了以下代码: 451
<?php $html_array = explode("\"",$this->tableContent[$userIdx][1][6]->value);echo $html_array[5]; ?>
答案 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)