Проблема с кодировкой

1 234
Gerga
На сайте с 02.08.2015
Offline
94
#21
Игорь К:
Господа, мож кто подскажет: а как сделать, чтобы приходящая тема была без зябликов?
Gerga:
Игорь К, после "<?php" установить эту функцию:
PHP код:
mb_internal_encoding('UTF-8');*

Так вы установите кодирвоку скрипта. Интерпретатор в этой кодировке будет обрабатывать переменные, включая http данные полученные методом post.

IL
На сайте с 20.04.2007
Offline
435
#22

А "зябликов", по всей видимости, отправляете Вы? или кто-то другой.

При отправке тему письма предварительно пропустить через base64_encode..

if (mail($to, '=?utf-8?B?'.base64_encode($subject).'?=', $body, $headers))

По идее, "умные php-senderы" такое могут.

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
S
На сайте с 30.09.2016
Offline
469
#23

Я вчера предложил решение. Проверить лень было? Дело 5 минут.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
Игорь К
На сайте с 07.02.2005
Offline
151
#24
Sitealert:
Я вчера предложил решение. Проверить лень было? Дело 5 минут.

Ну почему лень? :) Конечно не лень! Но вы написали для продвинутых ответ. А я не особо. Поэтому вставил ваш код куда думал правильным - а не помогло.

Грамотная регистрация торговой марки - ЗДЕСЬ (http://tm.ua/)
Игорь К
На сайте с 07.02.2005
Offline
151
#25
Gerga:
Так вы установите кодирвоку скрипта. Интерпретатор в этой кодировке будет обрабатывать переменные, включая http данные полученные методом post.

Добавил. Теперь файл начинается так:

 <?php


mb_internal_encoding('UTF-8');

$errorMSG = "";

// NAME

Но не помогло.

jpg 2222222222222222.jpg
SeVlad
На сайте с 03.11.2008
Offline
1609
#26

Да сервер же, сервер надо настраивать нормально прежде всего.

Хотя не помешает задавать правильные кодировки и в скриптах.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
Игорь К
На сайте с 07.02.2005
Offline
151
#27
SeVlad:
Да сервер же, сервер надо настраивать нормально прежде всего.

Думаю, про сервер вы не правы. Или правы частично. Ведь на этом сервере десяток сайтов, на которых с форм приходят правильно Темы.

Т.е. если можете подсказать, что в коде обработчика поправить - подскажите, пожалуйста )

Сейчас код таков:

<?php


mb_internal_encoding('UTF-8');

$errorMSG = "";

// NAME
if (empty($_POST["name"])) {
$errorMSG = "Name is required ";
} else {
$name = $_POST["name"];
}

// EMAIL
if (empty($_POST["email"])) {
$errorMSG .= "Email is required ";
} else {
$email = $_POST["email"];
}

// MSG SUBJECT
if (empty($_POST["msg_subject"])) {
$errorMSG .= "Subject is required ";
} else {
$msg_subject = $_POST["msg_subject"];
}

// Phone Number
if (empty($_POST["phone_number"])) {
$errorMSG .= "Number is required ";
} else {
$phone_number = $_POST["phone_number"];
}


// MESSAGE
if (empty($_POST["message"])) {
$errorMSG .= "Message is required ";
} else {
$message = $_POST["message"];
}


$EmailTo = "boss@iz.ua";

$Subject = "Сообщение с сайта m.tm.ua";

// prepare email body text
$Body = "";
$Body .= "ФИО: ";
$Body .= $name;
$Body .= "\n";
$Body .= "Email: ";
$Body .= $email;
$Body .= "\n";
$Body .= "Тема: ";
$Body .= $msg_subject;
$Body .= "\n";
$Body .= "Телефон: ";
$Body .= $phone_number;
$Body .= "\n";
$Body .= "Сообщение: ";
$Body .= $message;
$Body .= "\n";

// send email
$headers = "Content-Type: text/plain; charset=UTF-8";
$success = mail($EmailTo, $Subject, $Body, $headers);

// redirect to success page
if ($success && $errorMSG == ""){
echo "success";
}else{
if($errorMSG == ""){
echo "Something went wrong :(";
} else {
echo $errorMSG;
}
}

?>
IL
На сайте с 20.04.2007
Offline
435
#28
Игорь К:
что в коде обработчика поправить - подскажите, пожалуйста )

Начните с уже упомянутой обработки темы..

ivan-lev:
if (mail($to, '=?utf-8?B?'.base64_encode($subject).'?=', $body, $headers))
T7
На сайте с 19.09.2018
Offline
63
#29

Для m.tm.ua

{'Server': 'nginx/1.16.1', 'Date': 'Thu, 10 Oct 2019 14:06:28 GMT', 'Content-Type': 'text/html', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'X-Powered-By': 'PHP/5.3.29', 'Strict-Transport-Security': 'max-age=31536000;', 'Content-Encoding': 'gzip'}

1. Т.е. кодировку сервер не отдает. А надо бы:

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

2. Можете посмотреть что скрипт то получает, сохранив например в файлик:

file_put_contents(  dirname(__FILE__)  .  '/mail.txt',  $Subject . "\n======\n" . $Body );

// redirect to success page

Если там крякозябры, то п.1 решит проблему с большой вероятностью.

data: $("#contactForm").serialize(),

Как советовали выше, вместо

data: "name=" + name + "&email=" + email + "&msg_subject=" + msg_subject + "&phone_number=" + phone_number + "&message=" + message,

тоже может помочь.

Буквоедства ради

<meta charset="utf-8" />

а меж тем

<!doctype html>

а не XHTML

SeVlad
На сайте с 03.11.2008
Offline
1609
#30
Игорь К:
Думаю, про сервер вы не правы. Или правы частично

Таки прав. И timo-71 это частично подтвердил (см его п1).

Чтобы всё было ОК нужно чтобы ВСЕ кодировки были настроены и ВЕЗДЕ были одинаковы - от настроек сервера, до кодировок самих файлов. Тогда даже в заголовках ничего не придётся писать. Хотя это сделать всё равно желательно.

Игорь К:
Т.е. если можете подсказать, что в коде обработчика поправить - подскажите, пожалуйста )
Сейчас код таков:

Я скажу, только боюсь это не понравиться. Эту дырявый хлам надо заменить нормальным и опять же - настроить сервер чтобы таким нельзя было воспользоваться.

Поясню: если во FROM можно подставить адрес, не принадлежавший домену - это дыра в безопасности.

1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий