Почему php mail () преобразует одинарные и двойные кавычки в свои специальные символы HTML

0

У меня есть почтовый скрипт, который отправляет сообщение на мой адрес электронной почты, но по какой-то причине одиночные и двойные кавычки преобразуются в & # 34 и #, хотя я не использую htmlentities в любом месте. Почему это происходит?

<?php
    if($_POST)
    {
        $to_email = "[email protected]"; //Recipient email, Replace with own email here
        $subject = "E-mail from test.com website";

        //check if its an ajax request, exit if not
        if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {

            $output = json_encode(array( //create JSON data
                'type'=>'error', 
                'text' => 'Sorry Request must be Ajax POST'
            ));
            die($output); //exit script outputting json data
        } 

        //Sanitize input data using PHP filter_var().
        $user_email     = filter_var($_POST["user_email"], FILTER_SANITIZE_EMAIL);
        $message        = filter_var($_POST["msg"], FILTER_SANITIZE_STRING);

        if(!filter_var($user_email, FILTER_VALIDATE_EMAIL)){ //email validation
            $output = json_encode(array('type'=>'error', 'text' => 'Please enter a valid email!'));
            die($output);
        }

        if(strlen($message)<3){ //check emtpy message
            $output = json_encode(array('type'=>'error', 'text' => 'Too short of a message! Please enter longer something.'));
            die($output);
        }

        //email body
        $message_body = $message."\r\n\r\n-\r\nEmail : ".$user_email;

        //proceed with PHP email.
        $headers = 'From: '.$user_email.'' . "\r\n" .
        'Reply-To: '.$user_email.'' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();

        $send_mail = mail($to_email, $subject, $message_body, $headers);

        if(!$send_mail)
        {
            //If mail couldn't be sent output error. Check your PHP email configuration (if it ever happens)
            $output = json_encode(array('type'=>'error', 'text' => 'Could not send mail! Please check your PHP mail configuration.'));
            die($output);
        } else {
            $output = json_encode(array('type'=>'message', 'text' => 'Thank you for your email.'));
            die($output);
        }
    }
?>
Теги:
email

2 ответа

2
Лучший ответ

Это потому, что вы используете FILTER_SANITIZE_STRING. Это кодирует кавычки по умолчанию. Вы можете передать флаг, чтобы он не закодировал кавычки, поэтому замените эту строку:

$message = filter_var($_POST["msg"], FILTER_SANITIZE_STRING);

с этим

$message = filter_var($_POST["msg"], FILTER_SANITIZE_STRING, 
           FILTER_FLAG_NO_ENCODE_QUOTES);

и он оставит ваши цитаты в покое.

1

FILTER_SANITIZE_STRING делает это:

$_POST["msg"]="Fish''''''''''";


   $message        = filter_var($_POST["msg"], FILTER_SANITIZE_STRING);

echo $message ; //Fish&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;
  • 0
    Безумные рыбьи чешуи, которые я когда-либо видел
  • 1
    @ Фред-ии-люби меня немного рыбак: youtube.com/watch?v=WSeSTI272LM

Ещё вопросы

Сообщество Overcoder
Наверх
Меню