【问题标题】:Replace email with a base64encoded id in a string with PHP用 PHP 字符串中的 base64 编码 id 替换电子邮件
【发布时间】:2013-01-25 12:58:11
【问题描述】:

我想用电子邮件的图像替换字符串中的所有电子邮件。

我已经有一个 PHP 函数来创建提供给它的文本的图像。所以我只是在寻找如何用相应的 basse64engoded 字符串替换电子邮件。

这正是我想要的:

"my email is example@example.com and my phone no is 349080353"

我想要一个函数把上面的字符串转换成下面的:

my email is <img src="image.php?id=ZG5zLWFkbWluQ437yifhb2dsZS5jb20="> and my phone no is 349080353

电子邮件的 id 用base64_encode 编码。所以,我想要一个函数来搜索和替换带有以下 img 标签的电子邮件,并用base64_encode 对每封电子邮件进行编码并将其提供给“id”。

【问题讨论】:

标签: php regex preg-replace preg-match


【解决方案1】:

试试这个代码

$email_pattern = '/[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/';

$html = preg_replace_callback($email_pattern, "encode_email", "my email is example@example.com and my phone no is 349080353");

echo $html;

function encode_email($matches){
    return '<img src="image.php?id='. base64_encode($matches[0]) .'">';
}

【讨论】:

  • 最后使用 echo $html;
  • 哎呀!我的错;)我会再次检查
【解决方案2】:

检查了这个工作:)

<?php 
 $string = "my email is example@example.com and my phone no is 349080353";
 $pattern = "/[^@\s]*@[^@\s]*\.[^@\s]*/";
 $replacement = '<img src="">';
 $string1 = preg_replace($pattern, $replacement, $string);
 echo $string1
?>

【讨论】:

  • 它给了我:我的电子邮件是 我的电话号码是 349080353
  • 你必须使用 $replacement = &lt;img src="image.php?id=ZG5zLWFkbWluQ437yifhb2dsZS5jb20="&gt; 这只是虚拟代码
  • ZG5zLWFkbWluQ437yifhb2dsZS5jb20= 是动态的而不是静态的。如果您再次阅读我的问题,这是字符串中电子邮件的 base64_encode 值
  • 您能否进一步澄清一下您从哪里获得编码字符串,以便我可以为此制定确切的功能。对不起,打扰你。我只是想试试看:)
【解决方案3】:
$content = "my email is example@example.com and my phone no is 349080353"
preg_match("/[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})/i", $content, $matches);

print $matches[0];

【讨论】:

【解决方案4】:
<?php
$content = "my email is example@example.com, my 2nd email is example2@example.com and my phone no is 349080353";
$c='a-zA-Z-_0-9'; // allowed characters in domainpart
$la=preg_quote('!#$%&\'*+-/=?^_`{|}~', "/"); // additional allowed in first part (localpart)
$email="[$c$la][$c$la\.]*[^.]@[$c]+\.[$c]+";
preg_match_all("/\b$e\b/", $content, $matches);
foreach ($matches[0] as $e){
  $content = preg_replace("/\b($email)\b/", '<img src="'.base64_encode($e).'">', $content);
}
echo $content;

要获取所有有效的电子邮件地址,请参阅:What characters are allowed in an email address?

【讨论】:

    猜你喜欢
    • 2015-06-18
    • 2017-12-11
    • 2016-03-30
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多