Контактная форма на тему Wordpress и неанглийские знаки (utf-8)

В тему Wordpress уже встроена контактная форма.

Это внизу страницы nikosis.mzonespace.co.uk

Он работает нормально, он отправляет все правильно на хороший адрес электронной почты, кроме неанглийских знаков. Есть только вопросительные знаки, когда вы хотите ввести такие знаки, как ą, ę, ć, ź, ł, ó.

Так это выглядит так: ?, ?, ?, ?, ?, ?.

Как заставить это работать? Я пытался в течение часа или двух, но не мог найти решение.

Вот код контактной формы:

<?php 
$st_url = dirname(__FILE__);
if ( preg_match('#wp-content#isU', $st_url) ) {
    $path_to_file = explode('wp-content', $st_url);
    $path_to_wp = $path_to_file[0];
    require_once  $path_to_wp .'/wp-load.php';  
}
else {
    require_once '../../../../../../wp-load.php';  
}

function valid_email($str)
{
    return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
}

if ( isset($_POST) )
{
    $_POST = array_map('trim', $_POST);
    $contact_name = stripslashes($_POST['fullname']);
    $contact_email = stripslashes($_POST['email']);
    $persons_attending = stripslashes($_POST['persons_attending']);
    $wedding_ceremony = stripslashes($_POST['wedding_ceremony']);
    $regex_email = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix";
    if ( empty($contact_name) ) {
        $halt[] = __('Please enter your name.', 'beau');
    }
    if ( empty($contact_email) ) {
        $halt[] = __('Please enter your email.', 'beau');
    }
    elseif ( !valid_email($contact_email) ) {
        $halt[] = __('Please enter a valid email address.', 'beau');
    }
//  td


    if ( isset($halt) )
    {
        echo '<div class="st-message error">';
        echo '<a href="#" class="close" data-dismiss="alert">&times;</a>';
        echo @implode('<br />', $halt);
        echo '</div>';
    }
    else {

        $messages = '
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head></head>
        <body>
        <table>
            <tr><td valign="top"><b>'. __('Name', 'beau') .'</b></td><td valign="top">' . $contact_name . '</td></tr>
            <tr><td valign="top"><b>'. __('Email', 'beau') .'</b></td><td valign="top">' . $contact_email . '</td></tr>
            <tr><td valign="top"><b>'. __('Subject', 'beau') .'</b></td><td valign="top">' . $contact_subject . '</td></tr>
            <tr><td valign="top"><b>'. __('Message', 'beau')  .'</b></td><td valign="top"></td></tr>
            <tr><td valign="top" colspan="2"><td valign="top">' . $contact_message . '</td></tr>
        </table>
        </body>
        </html>';

        $headers = "MIME-Version: 1.0" . "\r\n";
        $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
        $headers .= "From: " . stripslashes($contact_name) . " <" . $contact_email . ">" . "\r\n";
        $headers .= "Sender-IP: " . $_SERVER["SERVER_ADDR"] . "\r\n";
        $headers .= "Priority: normal" . "\r\n";
        $headers .= "X-Mailer: PHP/" . phpversion();

        $body = utf8_decode($messages);
        if(!empty($_POST['send_to'])){
            $to = $_POST['send_to'];
        }else{
            $to=of_get_option('contact_email');
        }
        $subject = __('Contact Email From', 'beau') .': '. $contact_name;
        if ( wp_mail( $to, $subject, $body, $headers ) )
        {
            echo '<div class="st-message success">';
            echo '<a href="#" class="close" data-dismiss="alert">&times;</a>';
            echo of_get_option('contact_success', 'Your form has been submitted successfully! Thank you!');
            echo '</div>';
        }
        else
        {
            echo '<div class="st-message error">';
            echo '<a href="#" class="close" data-dismiss="alert">&times;</a>';
            echo 'Something went wrong!';
            echo '</div>';
        }
    }
}

Это мой код, я добавил некоторые модификации. Этот, который я получил в прошлый раз, был корневым файлом.

Тем не менее, это не работает:

    <?php 
    $st_url = dirname(__FILE__);
    if ( preg_match('#wp-content#isU', $st_url) ) {
        $path_to_file = explode('wp-content', $st_url);
        $path_to_wp = $path_to_file[0];
        require_once  $path_to_wp .'/wp-load.php';  
    }
    else {
        require_once '../../../../../../wp-load.php';  
    }

    function valid_email($str)
    {
        return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
    }

    if ( isset($_POST) )
    {
        $_POST = array_map('trim', $_POST);
        $contact_name = stripslashes($_POST['fullname']);
        $contact_email = stripslashes($_POST['email']);
        $persons_attending = stripslashes($_POST['persons_attending']);
        $wedding_ceremony = stripslashes($_POST['wedding_ceremony']);
        $regex_email = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix";
        if ( empty($contact_name) ) {
            $halt[] = __('Please enter your name.', 'beau');
        }
        if ( empty($contact_email) ) {
            $halt[] = __('Please enter your email.', 'beau');
        }
        elseif ( !valid_email($contact_email) ) {
            $halt[] = __('Please enter a valid email address.', 'beau');
        }
    //  td


        if ( isset($halt) )
        {
            echo '<div class="st-message error">';
            echo '<a href="#" class="close" data-dismiss="alert">&times;</a>';
            echo @implode('<br />', $halt);
            echo '</div>';
        }
        else {
            $messages = '
            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
            <html>
            <head><meta http-equiv="Content-Type"  content="text/html charset=UTF-8" /></head>
            <body>
            <table>
                <tr><td valign="top"><b>'. __('Name', 'beau') .'</b></td><td valign="top">' . $contact_name . '</td></tr>
                <tr><td valign="top"><b>'. __('Email', 'beau') .'</b></td><td valign="top">' . $contact_email . '</td></tr>
                <tr><td valign="top"><b>'. __('Subject', 'beau') .'</b></td><td valign="top">' . $persons_attending . '</td></tr>
                <tr><td valign="top"><b>'. __('Message', 'beau')  .'</b></td><td valign="top"></td></tr>
                <tr><td valign="top" colspan="2"><td valign="top">' . $wedding_ceremony . '</td></tr>
            </table>
            </body>
            </html>';

            $headers = "MIME-Version: 1.0" . "\r\n";
            $headers .= "Content-type:text/html;charset=utf-8" . "\r\n";
            $headers .= "From: " . stripslashes($contact_name) . " <" . $contact_email . ">" . "\r\n";
            $headers .= "Sender-IP: " . $_SERVER["SERVER_ADDR"] . "\r\n";
            $headers .= "Priority: normal" . "\r\n";
            $headers .= "X-Mailer: PHP/" . phpversion();

            $body = utf8_decode($messages);
            if(!empty($_POST['send_to'])){
                $to = $_POST['send_to'];
            }else{
                $to=of_get_option('contact_email');
            }
            $subject = __('Contact Email From', 'beau') .': '. $contact_name;
            if ( wp_mail( $to, $subject, $body, $headers ) )
            {
                echo '<div class="st-message success">';
                echo '<a href="#" class="close" data-dismiss="alert">&times;</a>';
                echo of_get_option('contact_success', 'Your form has been submitted successfully! Thank you!');
                echo '</div>';
            }
            else
            {
                echo '<div class="st-message error">';
                echo '<a href="#" class="close" data-dismiss="alert">&times;</a>';
                echo 'Something went wrong!';
                echo '</div>';
            }
        }
    }

person patron13    schedule 31.12.2014    source источник
comment
Попробуйте добавить еще одну строку между ‹head›‹/head› html в $messages--› <meta charset="UTF-8">   -  person Ravi Dhoriya ツ    schedule 31.12.2014
comment
Я пробовал это, и это не сработало. Вы можете проверить мой код ниже в ответе.   -  person patron13    schedule 31.12.2014


Ответы (1)


Добавьте мета-заголовок UTF-8,

<meta http-equiv="Content-Type"  content="text/html charset=UTF-8" /> (Or)

$headers=array("Content-Type: text/html; charset=UTF-8");
person user3040610    schedule 31.12.2014
comment
Я пробовал это, и это не сработало. Вы можете проверить мой код ниже в ответе. - person patron13; 31.12.2014