Как я могу установить кодировку UTF-8 в моей контактной форме php. Только латинские символы отображаются правильно - PullRequest
0 голосов
/ 05 марта 2020

Это php код контактной формы моего сайта. Дело в том, что нет никакой кодировки utf-8, поэтому символы (кроме латинского) возвращаются как символы. Данные вставляются в массив, поэтому массив возвращается как информация.

function handle_form_postdata( $post_array ) {
    $data = array();

    // Sanitize data, or initialize if they don't exist.
    $data['the_name']    = isset( $post_array['the_name'] ) ? trim( $post_array['the_name'] ) : '';
    $data['the_email']   = isset( $post_array['the_email'] ) ? trim( $post_array['the_email'] ) : '';
    $data['arrive']      = isset( $post_array['arrive'] ) ? trim( $post_array['arrive'] ) : '';
    $data['depart']      = isset( $post_array['depart'] ) ? trim( $post_array['depart'] ) : '';
    $data['guests']      = isset( $post_array['guests'] ) ? trim( $post_array['guests'] ) : '';
    $data['room_select']      = isset( $post_array['room_select'] ) ? trim( $post_array['room_select'] ) : '';
    $data['children']    = isset( $post_array['children'] ) ? trim( $post_array['children'] ) : '';
    $data['the_message'] = isset( $post_array['the_message'] ) ? filter_var( $post_array['the_message'], FILTER_SANITIZE_STRING ) : '';
    $data['errorString'] = '';
    $data['emailbody']   = '';
    $data['emailSent']   = false;

            $data['emailSent'] = mail( 'info@alleywayhouse-hydra.gr', 'Availability question for alleywayhouse-hydra', $data['emailbody'], 'From: "' . $data['the_name'] . '" <' . $data['the_email'] . '>' );  
        }
    }

    return $data;}

1 Ответ

0 голосов
/ 05 марта 2020

Функция почты требует:

mail($to, $subject, $message, $headers)

Добавить заголовок к четвертому параметру в функции

"Content-Type: text/html; charset=UTF-8"

Это должно выглядеть так:

$headers = "Content-Type: text/html; charset=UTF-8\r\n".
           "From: {$data['the_name']} <{$data['the_email']}>";
$subject = 'Availability question for alleywayhouse-hydra';

$data['emailSent'] = mail('info@alleywayhouse-hydra.gr', $subject, $data['emailbody'], $headers);

Также, Вашу функцию можно изменить следующим образом:

function handle_form_postdata($post_array)
{
    $data = [];
    $keys = ['the_name', 'the_email', 'arrive', 'depart', 'guests', 'room_select', 'children'];

    foreach ($keys as $key) {
        $data[$key] = isset($post_array[$key]) ? trim($post_array[$key]) : '';
    }

    $data['the_message'] = isset($post_array['the_message']) ? filter_var($post_array['the_message'], FILTER_SANITIZE_STRING) : '';
    $data['errorString'] = '';
    $data['emailbody'] = '';
    $data['emailSent'] = false;

    $headers = "Content-Type: text/html; charset=UTF-8\r\n" .
        "From: {$data['the_name']} <{$data['the_email']}>";
    $subject = 'Availability question for alleywayhouse-hydra';

    $data['emailSent'] = mail('info@alleywayhouse-hydra.gr', $subject, $data['emailbody'], $headers);

    return $data;
}
...