1

PHP 新手,但取得了新进展。我有一个联系表格,在用户提交后会发送一封电子邮件。现在我想通过删除坏字符或任何可能破坏电子邮件的东西来改进这种形式。这封电子邮件将由我阅读,因此我可以从技术上浏览所有垃圾邮件,但我不想这样做。我想要一封干净的电子邮件用于文档目的。

我正在使用 $_POST 数组,这是联系表单的 HTML:

<form class="form" method="post" action="contact.php">

<p class="name">
  <input type="text" name="name" id="name" />
  <label for="name">Name</label>
</p>

<p class="email">
  <input type="text" name="email" id="email" />
  <label for="email">E-mail</label>
</p>

<p class="web">
  <input type="text" name="web" id="web" />
  <label for="web">Website</label>
</p>

<p class="telephone">
  <input type="text" name="telephone" id="telephone" />
  <label for="telephone">Telephone</label>
</p>

<p class="question">Preferred Contact Method</p>
  <p id="preferred_question">
    <input type="radio" name="contact_option" class="telephone_opt" value="Telephone" />
    <label for="telephone_opt">Telephone</label><br />

    <input type="radio" name="contact_option" class="email_opt" value="Email" />
    <label for="email_opt">Email</label></p>

<p class="question">Describe what you need..</p>
  <p class="text">
    <textarea name="text"></textarea>
</p>

<p class="submit">
  <input type="submit" value="Send" />
</p>

</form>

这是我的contact.php(表单操作文件)

<?php
$msg = "Name: " . $_POST['name'] . "<br />";
$msg .= "Email: " . $_POST['email'] . "<br />";
$msg .= "Website: " . $_POST['web'] . "<br />";
$msg .= "Telephone: " . $_POST['telephone'] . "<br />";
$msg .= "Preferred Contact Method: " . $_POST['contact_option'] . "<br />";
$msg .= "Customer Needs: " . $_POST['text'];

$recipient = "support@mysite.com";
$subject = "Contact Has Been Made..";
$mailheaders = "MIME-Version: 1.0" . "\r\n";
$mailheaders .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$mailheaders .= "From: <support@mysite.com>" . "\r\n";

mail($recipient, $subject, $msg, $mailheaders);
echo "Thank You!";
?>
4

6 回答 6

1

试试这个函数作为一个很好的起点:

function cleanInput($input) {
    // Pass the $_GET, $_POST or $_REQUEST array
    $output = array();

    foreach ($input as $key=>$value) {
        $o = $value;

        // Make sure it's within the max length
        $o = substr($o,0,256);

        // Tidy up line breaks
        $o = preg_replace('/\n{2,}/', "\n\n", $o);
        $o = nl2br($o,FALSE);

        // Strip any odd characters
        $o = preg_replace('/[^A-Za-z0-9\. -\!\?\(\)\<\>\@]/', "", $o);

        // Put the data back in the array
        $output[$key] = $o;
    }

    // Return the array
    return $output;
}

用法:$post = cleanInput($_POST);

然后将$_POSTs替换为$post:$_POST['name']会变成$post['name'].

于 2013-10-03T19:30:06.800 回答
0

首先,您可能想考虑使用 filter_input 函数(http://php.net/manual/en/function.filter-input.php)过滤这些数据。一点安全更新;)您可以剥离标签(http://ca1.php.net/manual/en/function.strip-tags.php)只允许想要的标签,您也可以考虑addlahes()或stripslashes()删除或添加“\”。最后,您可能希望正确编码文本(utf-8?),以便使用 htmlentities(http://php.net/manual/en/function.htmlentities.php)查看所有特殊字符。我自己使用 htmlentities (utf-8) 和 strip_tags() 来发送自定义电子邮件!希望这有帮助

于 2013-10-03T19:22:59.500 回答
0

当然,看看这个简单的小教程:

http://www.stemkoski.com/php-remove-non-ascii-characters-from-a-string/

修改它以替换您想要的任何字符。老实说,尽我所能,这回答了我认为您要问的问题。但如果没有,只需进行谷歌搜索,这个问题非常基本。

如果您的意思是要进行字段验证(因此您将只接受特定格式的数据),只需对其进行快速搜索,您就会找到很好的资源。这是一个可能正是您需要的完整教程:http: //buildinternet.com/2008/12/how-to-validate-a-form-complete-with-error-messages-using-php-part-1/

这两个解决方案可能涵盖了:)

于 2013-10-03T19:23:28.677 回答
0

看起来除了所有值的全面过滤器之外,您还在寻找输入验证。这是电子邮件验证的功能。这使用正则表达式。我不会为您的所有要求编写代码,但您可以使用它来开始。

function  checkEmail($email) {
    if (!preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/' , $email)) {
        return false;
    }
    return true;
}
于 2013-10-03T19:29:28.920 回答
0

我吸收了你们所有人告诉我的很多东西,并从你们所有的答案中汇总了一些东西。

这是我的选择:

<?php
// Sanitize the data so its nice and clean..
function sanitize($data) {
$data = strip_tags(trim($data));
$search = array('/[^A-Za-z0-9\. -\!\?\(\)\<\>\@]/');
$data = preg_replace($search, '', $data);
return $data;
}

$msg = "Name: " . sanitize($_POST['name']) . "<br />";
$msg .= "Email: " . sanitize($_POST['email']) . "<br />";
$msg .= "Website: " . sanitize($_POST['web']) . "<br />";
$msg .= "Telephone: " . sanitize($_POST['telephone']) . "<br />";
$msg .= "Preferred Contact Method: " . sanitize($_POST['contact_option']) . "<br />";
$msg .= "Customer Needs: " . sanitize($_POST['text']);

$recipient = "support@mywebsite.com";
$subject = "Contact Has Been Made..";
$mailheaders = "MIME-Version: 1.0" . "\r\n";
$mailheaders .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$mailheaders .= "From: <support@mywebsite.com>" . "\r\n";

// Mail the message..
mail($recipient, $subject, $msg, $mailheaders);
echo "Thank you for your email!<br/><br/>";
?>
于 2013-10-05T00:30:35.057 回答
0

你可以使用这个功能:

  function sanitize($data){
        $data= htmlentities(strip_tags(trim($data)));
  $search = array('@<script[^>]*?>.*?</script>@si',  // Strip out javascript
                   '@<[\/\!]*?[^<>]*?>@si',            // Strip out HTML tags
                   '@<style[^>]*?>.*?</style>@siU',    // Strip style tags properly
                   '@<![\s\S]*?--[ \t\n\r]*>@'         // Strip multi-line comments including CDATA
    ); 
   $data = preg_replace($search, '', $data); 
        return $data;
    }
于 2013-10-03T19:30:57.103 回答