从HTML PHP联系表单中删除错误字符

时间:2013-10-03 19:17:08

标签: php html forms

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!";
?>

6 个答案:

答案 0 :(得分: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);

然后将$_POST替换为$post$_POST['name']将变为$post['name']

答案 1 :(得分:0)

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

答案 2 :(得分: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/

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

答案 3 :(得分: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;
}

答案 4 :(得分: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;
    }

答案 5 :(得分: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/>";
?>