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'])