我正在尝试对某些变量执行preg_replace。我的代码如下:
$ message =欢迎,%%名称%%!
恭喜!您现在是专家在线培训(EOT)的成员,这是世界上最适合青年发展专业人员的虚拟教室。现在使用EOT,在你的工作开始于%% campname %%之前,你将增强你的领导技能,提高你的自信心,并从%% campname %%的现场培训中获得更多。 EOT Logo随身携带EOT。我们知道您很忙,所以我们的新网站适合移动设备。您现在可以通过WiFi连接观看EOT视频并在任何智能手机,平板电脑或笔记本电脑上进行测验。想象一下,当您坐在咖啡馆,图书馆或学生休息室时,更多地了解行为管理,领导力,监督,游戏和安全!
%% directorname %%刚刚使用这些登录凭据为您创建了一个帐户:
%% LoginInfo类%%
要观看EOT的介绍视频并登录,请单击此处。
什么时候到期?董事通常要求员工在到达现场之前完成在线学习任务。如果您尚未收到作业的截止日期,请查看%% directorname %%以获取作业。当您浏览课程时,%% directorname %%将可以访问电子仪表板,以便他们跟踪您的进度和测验分数。
$loginInfo = 'Username: ' . $email . '<br/>'; // Login Information
$loginInfo .= 'Password: ' . $password;
$name = $first_name . ' ' . $last_name;
$campname = get_the_title($org_id); // the camp name
$vars = array(
'name' => $name,
'email' => $email,
'your_name' => $directorname,
'logininfo' => $loginInfo,
'directorname' => $directorname,
'campname' => $campname,
'numvideos' => NUM_VIDEOS,
);
/* Replace %%VARIABLE%% using vars*/
foreach($vars as $key => $value)
{
$message = preg_replace('/%%' . $key . '%%/', $value, $message);
}
echo $message; //send message
脚本中提供了$ email,$ password,$ first_name,$ last_name,$ loginInfo,$ directorname和$ campname。除了包含“$”后跟数字的密码外,所有内容都会被正确替换,例如像“man $ 1er”这样的密码被替换为“maner”。密码中的“$ 1”或“$ 2”被剥离。如果我使用的安全密码可能包含特殊字符和数字,例如“Ch33tos $ 1”而非被剥离为“Ch33tos”
,我如何确保用正确的密码替换邮件?答案 0 :(得分:1)
对于这个基本的东西,你最好使用str_replace:http://php.net/str_replace
示例:
/* Replace %%VARIABLE%% using vars*/
foreach($vars as $key => $value)
{
$message = str_replace('%%' . $key . '%%', $value, $message);
}
这可以防止密码中的特殊字符出现任何问题。
请注意,您的问题没有说明,但如果您在电子邮件中发送此邮件,则应不在电子邮件中发送密码。电子邮件不是一种安全的媒介。
答案 1 :(得分:1)
实际上甚至没有必要循环数组
Str_replace接受数组
在数组中每个键的开头和结尾添加%%
,此代码将全部替换它们。
$vars = array(
'%%name%%' => $name,
'%%email%%' => $email,
'%%your_name%%' => $directorname,
'%%logininfo%%' => $loginInfo,
'%%directorname%%' => $directorname,
'%%campname%%' => $campname,
'%%numvideos%%' => NUM_VIDEOS);
$message = str_replace(array_keys($vars) , $vars , $message);
请参阅此处查看工作示例https://3v4l.org/T8YGs
<小时/> 如果您仍想使用preg_replace,则需要转义字符串中的
$
有关示例https://regex101.com/r/BRJDCV/1 ,请参阅此regex101