带有特殊字符的preg_replace问题

时间:2017-09-08 20:07:17

标签: php regex preg-replace

我正在尝试对某些变量执行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”

,我如何确保用正确的密码替换邮件?

2 个答案:

答案 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