Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ajax отправляет кирилицу кракозябрами
 
 автор: MaxTax   (18.03.2008 в 21:25)   письмо автору
 
 

Есть скрипт отправки формы но кириллицу передает кракозябрами такого вида
Текст сообщения

Помогите разобрать проблему


<?
if(!isset($rnd) || !isset($name) || !isset($email) || !isset($subject) || !isset($body)) {
    
showform();
} else {
    
processform();
}

function 
processform(){
    global 
$name$email$subject$body;

    
$email_to1 "mail@mail.com"// enter your email here
    
$email_from1 $mail;
    
$email_to2 $mail;
    
$email_from2 $email_to1;
    
$email_subject "Письмо с сайта: ".stripslashes($subject);
    
$email_message "Сообщение от '".stripslashes($name);
    
$email_message .="' on ".date("d/m/Y")." at ".date("H:i")."\n\n";
    
$email_message .="--------- начало сообщения ---------\n\n";
    
$email_message .= stripslashes($body);
    
$email_message .="\n\n--------- конец сообщения ---------\n\n";

    
$confirmation_subject "Тема письма";
    
$confirmation "Это подтверждение того, что мы получили Ваше сообщение...";

    
// SEND EMAIL TO email_to2 - confirmation
    
$headers 'От: '.$email_from2."\r\n" .
   
'Reply-To: '.$email_from2."\r\n";

    
mail($email_to2$email_subject$confirmation$headers);

    
// SEND EMAIL TO email_to1 - message to you!!
    
$headers 'от: '.$email_from1."\r\n" .
   
'Reply-To: '.$email_from1."\r\n";

    
mail($email_to1$email_subject$email_message$headers);

    echo 
"<p>Спасибо, сообщение отправлено!</p> <p>В ближайшее время мы свяжемся с Вами.</p>";
    die();
// end processform()

function showform() {
?>
<script type="text/javascript">
<!--
var http = createRequestObject();
var areal = Math.random() + "";
var real = areal.substring(2,6);

function createRequestObject() {
    var xmlhttp;
    try { xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); }
  catch(e) {
    try { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
    catch(f) { xmlhttp=null; }
  }
  if(!xmlhttp&&typeof XMLHttpRequest!="undefined") {
      xmlhttp=new XMLHttpRequest();
  }
    return  xmlhttp;
}

function sendRequest() {
    var rnd = Math.random();
    var name = unescape(document.getElementById("name").value);
    var email = unescape(document.getElementById("email").value);
    var subject = unescape(document.getElementById("subject").value);
    var body = unescape(document.getElementById("body").value);

    try{
    http.open('POST',  'sender.php');
    http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
    http.onreadystatechange = handleResponse;
        http.send('name='+name+'&email='+email+'&subject='+subject+'&body='+body+'&rnd='+rnd);
    }
    catch(e){}
    finally{}
}

function check_values() {
    var valid = document.getElementById("valid").value;
    if(real !== valid) {
        alert("Вы не прошли проверку..... \n\n Пожалуйста введите 4 цифры как только они появятся.");
        return false;
    }

    var name = document.getElementById("name").value;
    var email = document.getElementById("email").value;
    var subject = document.getElementById("subject").value;
    var body = document.getElementById("body").value;
    if(trim(name) == "" ||
        trim(email) == "" ||
        trim(subject) == "" ||
        trim(body) == "") {
            alert("Пожалуйста заполните все поля");
    } else {
        if(isEmail(email)) {
            document.getElementById("submit").disabled=true;
            document.getElementById("submit").value='Пожалуйста подождите..';
            sendRequest();
        } else {
            alert("Электронная почта, кажется, неверна. \n\n Пожалуйста проверьте правильность адреса.");
            document.getElementById("email").focus();
            document.getElementById("email").select();
        }
    }
}

function handleResponse() {
    try{
    if((http.readyState == 4)&&(http.status == 200)){
        var response = http.responseText;
      document.getElementById("confirmation").innerHTML = response;
      document.getElementById("confirmation").style.display ="";
      document.getElementById("form").style.display = "none";
        }
  }
    catch(e){}
    finally{}
}

function isUndefined(a) {
   return typeof a == 'undefined';
}

function trim(a) {
    return a.replace(/^s*(S*(s+S+)*)s*$/, "$1");
}

function isEmail(a) {
   return (a.indexOf(".") > 0) && (a.indexOf("@") > 0);
}

function botCheckInfo() {
    alert("Чтобы предотвратить автоматическую отправку на наш адрес спам-сообщений через эту форму, пройдите простую проверку. \n\n Вы должны ввести 4 цифры для отправки сообщения.");
}
 // -->
 </script>

<div style="float:right; width:370px">
<div id="form">
  <form>
<div class="row"><span class="label">Ваше имя:</span><br>
  <span class="formw">
  <input type="text" id="name" maxlength="50" />
  </span></div>
<div class="row"><span class="label">Email:</span><br>
    <span class="formw"><input type="text" id="email" maxlength="100" />
    </span></div>
<div class="row"><span class="label">Тема сообщения:<br>
</span>
    <span class="formw"><input type="text" id="subject" maxlength="255" />
    </span></div>
<div class="row"><span class="label">Текст сообщения:<br>
</span>
    <span class="formw"><textarea cols="35" rows="6" id="body"></textarea>
    </span></div>
<div class="row"><a href="javascript:botCheckInfo()">Анти-спам</a>. Введите цифры '<b><script language="javascript">document.write(real)</script></b>' в поле:</div>
<div class="row"><input type="text" id="valid" size="15" /></div>
<div class="row">
    <input type="button" value="Отправить сообщение" id="submit" onClick="return check_values();"></div>
</form>
<span style="font-size:11px;">Все поля обязательны для заполнения</span>
</div>

<div id="confirmation" style="display:none"></div>
</div>
<?
// end showform()
?>

   
 
 автор: coloboc66   (19.03.2008 в 09:21)   письмо автору
 
   для: MaxTax   (18.03.2008 в 21:25)
 

Нафига выкладывать весь этот код, если у вас проблема только в кодировках??? Чтобы не получить кракозяблы, нужно использовать кодировку UTF-8.

   
 
 автор: MaxTax   (19.03.2008 в 10:42)   письмо автору
 
   для: MaxTax   (18.03.2008 в 21:25)
 

Код выложил, может кому пригодится

а кодировка стоит UTF-8
http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');

может еще где-то надо выставлять, если знаете, подскажите

   
 
 автор: Саня   (19.03.2008 в 11:07)   письмо автору
 
   для: MaxTax   (18.03.2008 в 21:25)
 

Вы отправляете письмо в кодировке WINDOWS-1251, а данные из аякса приходят всегда в UTF-8. Вам нужно перекодировать переменные $name, $email, $subject, $body в кодировку WINDOWS-1251.

   
 
 автор: MaxTax   (19.03.2008 в 12:42)   письмо автору
 
   для: Саня   (19.03.2008 в 11:07)
 

Подскажите пожалуйста функцию для перекодирования

   
 
 автор: Antohins   (19.03.2008 в 12:55)   письмо автору
 
   для: MaxTax   (19.03.2008 в 12:42)
 

>>Подскажите пожалуйста функцию для перекодирования

iconv

почитай мануал

   
 
 автор: ONYX   (19.03.2008 в 13:00)   письмо автору
 
   для: Antohins   (19.03.2008 в 12:55)
 

iconv("WINDOWS-1251", "UTF-8", [Приняты данные])

   
 
 автор: MaxTax   (19.03.2008 в 13:37)   письмо автору
 
   для: Antohins   (19.03.2008 в 12:55)
 

написал так
$email_subject = "Письмо с сайта: ".iconv("WINDOWS-1251", "UTF-8", "".stripslashes($subject)."");
пришло
%u0422%u0435%u043A%u0441%u0442

смена местами "UTF-8", "WINDOWS-1251" тот же результат

   
 
 автор: Antohins   (19.03.2008 в 13:56)   письмо автору
 
   для: MaxTax   (19.03.2008 в 13:37)
 

у меня та же проблема. отпишись пожалуйста если найдешь решение проблемы

   
 
 автор: ONYX   (20.03.2008 в 08:11)   письмо автору
 
   для: Antohins   (19.03.2008 в 13:56)
 

Правда перепутал местами кодировки
iconv('utf-8', 'windows-1251',[данные])

   
 
 автор: KPETuH   (20.03.2008 в 09:13)   письмо автору
 
   для: Саня   (19.03.2008 в 11:07)
 

лучше все таки мне кажется везде использовать utf-8 а не париться с перекодировкой :)

   
 
 автор: MaxTax   (20.03.2008 в 15:15)   письмо автору
 
   для: KPETuH   (20.03.2008 в 09:13)
 

так ничего и не получается. В чем еще может быть проблема?

   
 
 автор: KPETuH   (20.03.2008 в 15:58)   письмо автору
 
   для: MaxTax   (20.03.2008 в 15:15)
 

используйте везде utf-8 ...

   
 
 автор: KirillKiev   (20.03.2008 в 16:19)   письмо автору
 
   для: MaxTax   (20.03.2008 в 15:15)
 

как то была похожая проблема
бросил в директорию где работает Ajax
.htaccess
со строкой
AddDefaultCharset windows-1251
и попустило

   
 
 автор: Sergeich   (20.03.2008 в 15:57)   письмо автору
 
   для: MaxTax   (18.03.2008 в 21:25)
 

А еще посмотрите на настройки сервера. Если у Вас стоит AddDefaultCharset windows-1251, а вывести Вы пытаетесь в UTF-8, то ничего и не получится. Лучше эту директиву вообще закомментировать.

   
 
 автор: MaxTax   (20.03.2008 в 17:31)   письмо автору
 
   для: Sergeich   (20.03.2008 в 15:57)
 

HTTP_ACCEPT_CHARSET windows-1251,utf-8;q=0.7,*;q=0.7
по остальным пареметрам то же

   
 
 автор: Sergeich   (20.03.2008 в 19:37)   письмо автору
 
   для: MaxTax   (20.03.2008 в 17:31)
 

А о каком сервере идет вообще речь?
В апаче надо глянуть конфиг httpd.conf
Директивы HTTP_ACCEPT_CHARSET там нет. Посмотрите как там выглядит указанная мною выше директива. Если там стоит какая-то одна кодировка, windows-1251 например, то сервер просто не сможет работать корректно с другими.

   
 
 автор: MaxTax   (20.03.2008 в 23:42)   письмо автору
 
   для: Sergeich   (20.03.2008 в 19:37)
 

не имею доступа к httpd.conf
проверял phpinfo()

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования