Preg match 预匹配问题:分隔符不能是字母数字或反斜杠

Preg match 预匹配问题:分隔符不能是字母数字或反斜杠,preg-match,delimiter,Preg Match,Delimiter,我知道这个问题已经在不同的问题中讨论过了,但人们给出的答案似乎对我不起作用。我正在处理以下问题: if ( (preg_match($suspect, $lowmsg) ) || (preg_match($suspect, strtolower($_POST['name']))) || (preg_match($suspect, strtolower($_POST['email'])))) 现在,人们一直在说,如果我在“/email/”这样的引号前后加上“/code>”/“,这将解决问

我知道这个问题已经在不同的问题中讨论过了,但人们给出的答案似乎对我不起作用。我正在处理以下问题:

if ( (preg_match($suspect, $lowmsg) )
  || (preg_match($suspect, strtolower($_POST['name'])))
  || (preg_match($suspect, strtolower($_POST['email']))))
现在,人们一直在说,如果我在“/email/”这样的引号前后加上“/code>”/“,这将解决问题。我尝试将/作为电子邮件和名称,但它仍然使我返回到相同的分隔符错误

我还得到了最后一个错误:警告:无法修改标题信息-标题已经由(我的网站的send.php:43)在第61行发送。这和它有什么关系吗?或者这只是早期错误的结果

以下是相关方的完整代码:

<?php

 if(($_POST['email']=="")||($_POST['name']=="")||($_POST['message']==""))

 {

  echo "<html><body><p>The following fields are <strong>required</strong>.</p><ul>";

  if($_POST['name'] == ""){ echo "<li>Name</li>"; }

  if($_POST['email'] == ""){ echo "<li>Email</li>"; }

  if($_POST['message'] == ""){ echo "<li>Message</li>"; }

  echo "</ul><p>Please use your browser's back button to complete the form.</p></body></html>";

 }

 else

 {

  $message = "";

  $message .= "Name: " . htmlspecialchars($_POST['name'], ENT_QUOTES) . "<br>\n";

  $message .= "Email: " . htmlspecialchars($_POST['email'], ENT_QUOTES) . "<br>\n";

  $message .= "Message: " . htmlspecialchars($_POST['message'], ENT_QUOTES) . "<br>\n";

  $subject = htmlspecialchars($_POST['subject'], ENT_QUOTES);

  $pagelink = htmlspecialchars($_POST['pagelink'], ENT_QUOTES);

  $repemail = htmlspecialchars($_POST['repemail'], ENT_QUOTES);

  $injection_strings = array ( "content-type:","charset=","mime-version:","multipart/mixed","bcc:","cc:");

  foreach($injection_strings as $suspect)

  {

   if((preg_match($suspect, $lowmsg)) || (preg_match($suspect, strtolower($_POST['/name/']))) || (preg_match($suspect, strtolower($_POST['/email/']))))

   {

     die ( 'Illegal Input.  Go back and try again.  Your message has not been sent.' );

   }

  }

 $headers = "MIME-Version: 1.0\r\nContent-type: text/html; charset=iso-8859-1\r\n";

 $headers .= "From: \"" . $_POST['/name/'] . "\" <" . $_POST['/email/'] . ">\r\n";

 $headers .= "Reply-To: " . $_POST['/email/'] . "\r\n\r\n";

  mail($repemail, $subject, $message, $headers);

 header("Location: " . $pagelink . "");

 }

?>

您可以尝试使用其他分隔符,例如/#~

希望有帮助

编辑:您不需要在$\u POST内使用反斜杠

Use $_POST['name'] instead of $_POST['/name/']
编辑:尝试

preg_match("/".$suspect."/i", strtolower($_POST['name']);
然而,我认为你不会在帖子名中找到任何
$injection\u字符串。你可能需要重新思考你是如何搜索的。“内容类型”不会将“文本/html”与当前语句匹配。你需要试试其他的正则表达式,比如

preg_match("/".$suspect."(.*)/i", strtolower($_POST['name'], $output);
这样它将
$output[0]
,您的“可疑”变量。我不确定这是否是你想要的,但也许会让你走上正确的轨道

编辑:这里

如果你想看一下,说“抄送:”并找到它是什么电子邮件,使用这个

preg_match("/cc:(.*)/i",'cc:'.$_POST['email'],$output);
$output[0]; would equal your email. 
为了与您的foreach循环兼容,您可能还需要对其进行更改

在“if语句”中切换以下代码


显示您的代码。$suspect的内容是什么?您能打印出suspect并实际向我们展示它包含的内容吗
preg_match("/".$suspect."(.*)/i",$suspect.$_POST['email'])