За последние 24 часа нас посетили 17675 программистов и 1672 робота. Сейчас ищут 1877 программистов ...

Проблема с кодировкой (feedback php+ajax)

Тема в разделе "JavaScript и AJAX", создана пользователем John What, 18 ноя 2008.

  1. John What

    John What Активный пользователь

    С нами с:
    27 янв 2007
    Сообщения:
    33
    Симпатии:
    0
    p.s.ПОИСК юзал
    перевести все в кодировку UTF-8 Не подходит
    есть зацепка-сообщение с другого форума, я переадресовал грубо его пост. он тоже самое спрашивал, потом разобрался.
    найти его так и не смог
    "Все, разобрался! Надо подключать нормальную библиотеку для обработки символов. Теперь все пашет! Кому надо, библиотека JsHttpRequest - суперская вещь!"
    http://all-forum.ru/topic19622s0.html?p ... ntry100051
    Ищу для сайта форму обратной связи на Ajax + PHP. Нашел много, но нифига они не пашут с русскими кодировками, так как Ajax работает с UTF-8, а сайт у меня на WIN-1251. Может, кто даст ссылку или на решение, или на готовый скрипт. Вот мои два файла.

    Сама форма связи в CONTACT.HTML
    HTML:
    1. <style type="text/css">
    2. body {
    3.     margin:50px 0px; padding:0px;
    4.     text-align:center;
    5.     }
    6.    
    7. #contactarea {
    8.     width:350px;
    9.     margin:0px auto;
    10.     text-align:left;
    11.     padding:15px;
    12.     border:1px solid #333;
    13.     background-color:#eee;
    14.     font-weight: bold;
    15.     font-family: Verdana, Arial;
    16.     font-size: 12px;
    17. }
    18.  
    19. #inputbox {
    20.     border: 1px solid #000;
    21.     width: 270;
    22.     padding: 2px;
    23.     font-weight: bold;
    24.     font-family: Verdana, Arial;
    25.     font-size: 12px;
    26. }
    27.  
    28. #inputlabel {
    29.     font-weight: bold;
    30.     font-family: Verdana, Arial;
    31.     font-size: 12px;
    32.  
    33. }
    34.  
    35. #textarea {
    36.     border: 1px solid #000;
    37.     padding: 2px;
    38.     font-weight: bold;
    39.     font-family: Verdana, Arial;
    40.     font-size: 12px;
    41.     width:330;
    42. }
    43.  
    44. #submitbutton {
    45.     border: 1px solid #000;
    46.     background-color: #eee;
    47.  
    48. }
    49.  
    50. <script language="javascript">
    51.  
    52. function createRequestObject() {
    53.     var ro;
    54.     var browser = navigator.appName;
    55.     if(browser == "Microsoft Internet Explorer"){
    56.         ro = new ActiveXObject("Microsoft.XMLHTTP");
    57.     }else{
    58.         ro = new XMLHttpRequest();
    59.     }
    60.     return ro;
    61. }
    62.  
    63. var http = createRequestObject();
    64.  
    65. function sendemail() {
    66.     var msg = document.contactform.msg.value;
    67.     var name = document.contactform.name.value;
    68.     var email = document.contactform.email.value;
    69.     var subject = document.contactform.subject.value;
    70.     document.contactform.send.disabled=true;
    71.     document.contactform.send.value='Sending....';
    72.  
    73.     http.open('get', 'contact.php?msg='+msg+'&name='+name+'&subject='+subject+'&email='+email+'&action=send');
    74.     http.onreadystatechange = handleResponse;
    75.     http.send(null);
    76. }
    77.  
    78. function handleResponse() {
    79.     if(http.readyState == 4){
    80.         var response = http.responseText;
    81.         var update = new Array();
    82.  
    83.         if(response.indexOf('|' != -1)) {
    84.             update = response.split('|');
    85.             document.getElementById(update[0]).innerHTML = update[1];
    86.          
    87.         }
    88.     }
    89. }
    90. </head>
    91. <div id="contactarea">
    92. <form name="contactform" id="contactform">
    93. <span id="inputlabel">Name:</span>   <input type="text" name="name" id="inputbox"><br /><br />
    94. <span id="inputlabel">Email:</span>    <input type="text" name="email" id="inputbox"><br /><br />
    95. <span id="inputlabel">Subject:</span> <input type="text" name="subject" id="inputbox"><br /><br />
    96. <span id="inputlabel">Message:</span><br />
    97. <textarea name="msg" rows="10" id="textarea"></textarea>
    98. <br /><br />
    99. <input type="button" value="Send Email" name="send" onclick="sendemail();" id="submitbutton">
    100.  
    101. </form>
    102. </div>
    103. </body>
    104. </html>
    contact.php
    PHP:
    1. <?php
    2.  
    3. $to = "user@test.com";
    4. $subject_prefix = "";
    5.  
    6. if(!isset($_GET['action']))
    7. {
    8. die("Нельзя сюда лазить!");
    9. }
    10.  
    11. $name = trim($_GET['name']);
    12. $email = trim($_GET['email']);
    13. $subject = trim($_GET['subject']);
    14. $message = trim($_GET['msg']);
    15.  
    16. mail($to,$subject,$message,"From: ".$email."");
    17.  
    18. echo 'contactarea|Thank you '.$name.', your email has been sent.';
    19. ?>
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    contact.php:
    PHP:
    1.  
    2. <?php
    3. header("Content-type: text/html; charset=windows-1251");
    4.  
     
  3. John What

    John What Активный пользователь

    С нами с:
    27 янв 2007
    Сообщения:
    33
    Симпатии:
    0
    нет... это не помогает :cry:
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Файл в какой кодировке?John What
    А что именно возвращает иероглифами? Все, или только $name?
    А что на меил приходит?

    Я так подозреваю, что после вставки header.. в страницу, браузеру возвращается только $name иероглифами. Для этого надо:
    iconv("utf-8", "windows-1251", $name);

    Кстати, данные для письма я бы еще провел через htmlspecialchars и проверил на длину.
     
  5. John What

    John What Активный пользователь

    С нами с:
    27 янв 2007
    Сообщения:
    33
    Симпатии:
    0
    все иероглифами...
    как же тот чел сделал
    он юзал библиотеку JsHttpRequest
    вот его цитата
     
  6. obsrv

    obsrv Активный пользователь

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Хм. Только что набросал. С win1251 работает. Что я не так делаю?
    HTML:
    1.  
    2. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
    3. <script language="javascript">
    4. function AJAXInteraction(url, callback) {
    5.     var req = init();
    6.     req.onreadystatechange = processRequest;
    7.     function init() {
    8.       if (window.XMLHttpRequest) {
    9.         return new XMLHttpRequest();
    10.       } else if (window.ActiveXObject) {
    11.         return new ActiveXObject("Microsoft.XMLHTTP");
    12.       }
    13.     }
    14.     function processRequest () {
    15.         if (req.readyState == 4) {
    16.         if (req.status == 200) {
    17.           if (callback) callback(req.responseXML, req.responseText);
    18.         }
    19.       }
    20.     }
    21.  
    22.     this.doGet = function() {
    23.       req.open("GET", url, true);
    24.       req.send(null);
    25.     }
    26. }
    27.  
    28. function sota() {
    29.   url = "ajax_php.php";
    30.   var ajax = new AJAXInteraction(url, sotaBack);
    31.   ajax.doGet();
    32. }
    33. function sotaBack(xml, txt) {
    34.     alert(cnt = xml.getElementsByTagName("xhml")[0].firstChild.nodeValue );
    35.     obj = document.getElementById("tos");
    36.     obj.innerHTML = cnt;
    37. }
    38. </head>
    39. <p><input type="button" name="sa" id="sa" value="Жмем" onClick="sota();"/></p>
    40. <div id="tos">
    41. Привет
    42. </div>
    43. </body>
    44. </html>
    45.  
    PHP:
    1.  
    2. <?php
    3. $str = "Привет, Мир";
    4. header("Content-Type: text/xml; charset=\"windows-1251\"");
    5. echo "<xhml><![CDATA[$str]]></xhml>";
    6. ?>
    7.  
    copy-paste делать аккуратно) - следить за кодировкой.
     
  7. John What

    John What Активный пользователь

    С нами с:
    27 янв 2007
    Сообщения:
    33
    Симпатии:
    0
    все. проблему решил. Юзал библиотеку JsHttpRequest
    http://dklab.ru/lib/JsHttpRequest/

    HTML:
    1.  
    2. <script src="../../lib/JsHttpRequest/JsHttpRequest.js"></script>
    3. <script type="text/javascript" language="JavaScript">
    4. function doLoad(value) {
    5.     // Create new JsHttpRequest object.
    6.     var req = new JsHttpRequest();
    7.     // Code automatically called on load finishing.
    8.     req.onreadystatechange = function() {
    9.         if (req.readyState == 4) {
    10.     // Write debug information too (output become responseText).
    11.             document.getElementById('debug').innerHTML = req.responseText;
    12.         }
    13.     }
    14.     // Prepare request object (automatically choose GET or POST).
    15.     req.open(null, 'frm_backend.php', true);
    16.     // Send data to backend.
    17.     req.send( { q: value } );
    18. }
    19. <form method="post" id="f" enctype="multipart/form-data" onsubmit="return false">
    20.     Ваше имя: <input type="text" name="name"><br>
    21.     Электропочта: <input type="text" name="email"><br>
    22.     Тема: <input type="text" name="subject"><br>
    23.     <span id="inputlabel">Текст сообщения:</span><br>
    24.     <textarea name="msg" rows="10" id="textarea"></textarea>
    25. <br>
    26.     <input type="button" value="Отправить"
    27.     onclick="doLoad(document.getElementById('f'))">
    28. </form>
    29. <br>
    30. <div id="debug">
    31. </div>
    32.  
    frm_backend.php
    PHP:
    1.  
    2. <?php
    3. // Load JsHttpRequest backend.
    4. require_once "../../lib/JsHttpRequest/JsHttpRequest.php";
    5. // Create main library object. You MUST specify page encoding!
    6. $JsHttpRequest =& new JsHttpRequest("windows-1251");
    7. // Store resulting data in $_RESULT array (will appear in req.responseJs).
    8. $GLOBALS['_RESULT'] = 'Письмо отправлено';
    9. // Below is unparsed stream data (will appear in req.responseText).
    10. mail('to@',$_REQUEST["subject"],$_REQUEST["msg"],"From: ".$_REQUEST["email"]."");
    11. ?>
    12.  
    13.  
    надо еще капчу прикрутить и в принципе сойдет