-2

我正在尝试修改一个 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] => >... 
)

看起来<a>html 输出的标记部分被替换为"...",就像您在 Chrome 的开发人员工具 html 检查器中看到的那样,在您展开它之前,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]->valuein \components\com_comprofiler\plugin\templates\default\default.php,最初它不在代码中,但我做了一些测试并确认它包含电子邮件地址。我在第 450 行和第 451 行之间插入了以下代码

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

2 回答 2

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
于 2014-06-06T20:48:05.807 回答
-1
  1. 为避免链接,您可以使用转义序列。
  2. 如果给定的字符串与电子邮件地址模式匹配,您可以使用正则表达式进行匹配并打印出来
  3. PHP 对可以执行最复杂任务的函数有广泛的支持,因此请搜索它们
于 2014-06-06T20:40:43.353 回答