p.s.ПОИСК юзал перевести все в кодировку UTF-8 Не подходит есть зацепка-сообщение с другого форума, я переадресовал грубо его пост. он тоже самое спрашивал, потом разобрался. найти его так и не смог "Все, разобрался! Надо подключать нормальную библиотеку для обработки символов. Теперь все пашет! Кому надо, библиотека JsHttpRequest - суперская вещь!" http://all-forum.ru/topic19622s0.html?p ... ntry100051 Ищу для сайта форму обратной связи на Ajax + PHP. Нашел много, но нифига они не пашут с русскими кодировками, так как Ajax работает с UTF-8, а сайт у меня на WIN-1251. Может, кто даст ссылку или на решение, или на готовый скрипт. Вот мои два файла. Сама форма связи в CONTACT.HTML HTML: <html> <head> <title></title> <style type="text/css"> body { margin:50px 0px; padding:0px; text-align:center; } #contactarea { width:350px; margin:0px auto; text-align:left; padding:15px; border:1px solid #333; background-color:#eee; font-weight: bold; font-family: Verdana, Arial; font-size: 12px; } #inputbox { border: 1px solid #000; width: 270; padding: 2px; font-weight: bold; font-family: Verdana, Arial; font-size: 12px; } #inputlabel { font-weight: bold; font-family: Verdana, Arial; font-size: 12px; } #textarea { border: 1px solid #000; padding: 2px; font-weight: bold; font-family: Verdana, Arial; font-size: 12px; width:330; } #submitbutton { border: 1px solid #000; background-color: #eee; } </style> <script language="javascript"> function createRequestObject() { var ro; var browser = navigator.appName; if(browser == "Microsoft Internet Explorer"){ ro = new ActiveXObject("Microsoft.XMLHTTP"); }else{ ro = new XMLHttpRequest(); } return ro; } var http = createRequestObject(); function sendemail() { var msg = document.contactform.msg.value; var name = document.contactform.name.value; var email = document.contactform.email.value; var subject = document.contactform.subject.value; document.contactform.send.disabled=true; document.contactform.send.value='Sending....'; http.open('get', 'contact.php?msg='+msg+'&name='+name+'&subject='+subject+'&email='+email+'&action=send'); http.onreadystatechange = handleResponse; http.send(null); } function handleResponse() { if(http.readyState == 4){ var response = http.responseText; var update = new Array(); if(response.indexOf('|' != -1)) { update = response.split('|'); document.getElementById(update[0]).innerHTML = update[1]; } } } </script> </head> <body> <div id="contactarea"> <form name="contactform" id="contactform"> <span id="inputlabel">Name:</span> <input type="text" name="name" id="inputbox"><br /><br /> <span id="inputlabel">Email:</span> <input type="text" name="email" id="inputbox"><br /><br /> <span id="inputlabel">Subject:</span> <input type="text" name="subject" id="inputbox"><br /><br /> <span id="inputlabel">Message:</span><br /> <textarea name="msg" rows="10" id="textarea"></textarea> <br /><br /> <input type="button" value="Send Email" name="send" onclick="sendemail();" id="submitbutton"> </form> </div> </body> </html> contact.php PHP: <?php $to = "user@test.com"; $subject_prefix = ""; if(!isset($_GET['action'])) { die("Нельзя сюда лазить!"); } $name = trim($_GET['name']); $email = trim($_GET['email']); $subject = trim($_GET['subject']); $message = trim($_GET['msg']); mail($to,$subject,$message,"From: ".$email.""); echo 'contactarea|Thank you '.$name.', your email has been sent.'; ?>
Файл в какой кодировке?John What А что именно возвращает иероглифами? Все, или только $name? А что на меил приходит? Я так подозреваю, что после вставки header.. в страницу, браузеру возвращается только $name иероглифами. Для этого надо: iconv("utf-8", "windows-1251", $name); Кстати, данные для письма я бы еще провел через htmlspecialchars и проверил на длину.
Хм. Только что набросал. С win1251 работает. Что я не так делаю? HTML: <html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251"> <script language="javascript"> function AJAXInteraction(url, callback) { var req = init(); req.onreadystatechange = processRequest; function init() { if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); } } function processRequest () { if (req.readyState == 4) { if (req.status == 200) { if (callback) callback(req.responseXML, req.responseText); } } } this.doGet = function() { req.open("GET", url, true); req.send(null); } } function sota() { url = "ajax_php.php"; var ajax = new AJAXInteraction(url, sotaBack); ajax.doGet(); } function sotaBack(xml, txt) { alert(cnt = xml.getElementsByTagName("xhml")[0].firstChild.nodeValue ); obj = document.getElementById("tos"); obj.innerHTML = cnt; } </script> </head> <body> <p><input type="button" name="sa" id="sa" value="Жмем" onClick="sota();"/></p> <div id="tos"> Привет </div> </body> </html> PHP: <?php $str = "Привет, Мир"; header("Content-Type: text/xml; charset=\"windows-1251\""); echo "<xhml><![CDATA[$str]]></xhml>"; exit; ?> copy-paste делать аккуратно) - следить за кодировкой.
все. проблему решил. Юзал библиотеку JsHttpRequest http://dklab.ru/lib/JsHttpRequest/ HTML: <script src="../../lib/JsHttpRequest/JsHttpRequest.js"></script> <script type="text/javascript" language="JavaScript"> function doLoad(value) { // Create new JsHttpRequest object. var req = new JsHttpRequest(); // Code automatically called on load finishing. req.onreadystatechange = function() { if (req.readyState == 4) { // Write debug information too (output become responseText). document.getElementById('debug').innerHTML = req.responseText; } } // Prepare request object (automatically choose GET or POST). req.open(null, 'frm_backend.php', true); // Send data to backend. req.send( { q: value } ); } </script> <form method="post" id="f" enctype="multipart/form-data" onsubmit="return false"> Ваше имя: <input type="text" name="name"><br> Электропочта: <input type="text" name="email"><br> Тема: <input type="text" name="subject"><br> <span id="inputlabel">Текст сообщения:</span><br> <textarea name="msg" rows="10" id="textarea"></textarea> <br> <input type="button" value="Отправить" onclick="doLoad(document.getElementById('f'))"> </form> <br> <div id="debug"> </div> frm_backend.php PHP: <?php // Load JsHttpRequest backend. require_once "../../lib/JsHttpRequest/JsHttpRequest.php"; // Create main library object. You MUST specify page encoding! $JsHttpRequest =& new JsHttpRequest("windows-1251"); // Store resulting data in $_RESULT array (will appear in req.responseJs). $GLOBALS['_RESULT'] = 'Письмо отправлено'; // Below is unparsed stream data (will appear in req.responseText). mail('to@',$_REQUEST["subject"],$_REQUEST["msg"],"From: ".$_REQUEST["email"].""); ?> надо еще капчу прикрутить и в принципе сойдет