Не распознается русский при использовании Ajax

Discussion in 'PHP' started by GHostly_FOX, 28 Mar 2007.

  1. GHostly_FOX

    GHostly_FOX Elder - Старейшина

    Joined:
    4 Jan 2007
    Messages:
    34
    Likes Received:
    15
    Reputations:
    0
    У меня такая трабла:
    Я тока начал изучать технологию AJAX написал небольшой скрипт который передается моему PHP файлу параметры и затем показывает результат, но тут одно проблема, после вывода на экран результатов весь русский текст становится вопросами, я решил проверить, создал отдельный РНР скрипт который просто бы считывал данные сам с себя и сохранил его в UTF-8 (Благо EditPlus 2 позволяет это сделать), так после проверки кода все начало работать...
    Как мне быть?! простое перекодирование текста в UTF-8 командой utf8_encoding непомогает, ниже приведен код скрипта:

    PHP:
    <span id="email_label">
    <script>
    function createRequestObject() {
    var ro;
    if (navigator.appName == "Microsoft Internet Explorer") {
    ro = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
    ro = new XMLHttpRequest();
    }
    return ro;
    }

    var http = createRequestObject();

    function sendRequest(email) {
    http.open('get', 'index.php?email=' + encodeURIComponent(email));
    http.onreadystatechange = handleResponse;
    http.send(null);
    }

    function handleResponse() {
    if (http.readyState == 4) {
    document.getElementById('email_label').innerHTML = http.responseText;
    }
    }

    alert(http.responseText);
    </script>
    <?php
    error_reporting
    (0);
    print 
    "AYAX + PHP + ORACLE\n<br>";

    if (isset(
    $_GET['email'])){
    $mail $_GET['email'];
    }

    if (isset(
    $mail)) {
    echo 
    'Скрипт работает! Email address has already been registered!';
    } else {
    echo 
    'Email address is available!';
    }
    ?>
    <form action="index.php" method="post">
    Email Address: <input name="email" type="text" size="30" maxlength="60" onchange="sendRequest(this.form.email.value)" /> <br />
    First Name: <input name="first_name" type="text" size="20" maxlength="20" /><br />
    (Rest of the form...)
    </form>
    </span>
     
  2. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    376
    Reputations:
    460
    Почитай вот тут http://dklab.ru/lib/JsHttpRequest/
    и разбери класс для работы с AJAX, и тогда ты найдешь ответ на свой вопрос.
     
  3. SMiX

    SMiX Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    227
    Likes Received:
    55
    Reputations:
    29
    req.setRequestHeader('Accept-Charset', 'windows-1251'); Должно помочь
     
  4. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Все так, но, судя по его посту, нужна кодировка UTF-8, а не cp1251, поэтому:

    Code:
    req.setRequestHeader('Accept-Charset', 'utf-8');
     
    #4 Helios, 28 Mar 2007
    Last edited: 28 Mar 2007
  5. Dmitriy_ua

    Dmitriy_ua Elder - Старейшина

    Joined:
    31 Aug 2006
    Messages:
    42
    Likes Received:
    6
    Reputations:
    -1
    подскажыте куда ставить этот заголовок
    req.setRequestHeader('Accept-Charset', 'utf-8');
    если ставлю
    перед
    xmlHttp.onreadystatechange=stateChanged;
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);

    или после не пашет ява-скрипт,
    проблема вроде тажа
    в Опере.
    РџСЂРёРІРµС
    заместо русских букв
    в Эксплорере всё ок.

    index.php
    PHP:
    <html>   <head>   <META content="text/html; charset=windows-1251" http-equiv="Content-Type">   <script src="clienthint.js">   </script>   </head>   <body onload="showHint(\''.htmlSpecialChars($_SESSION['login']).'\')">  <span id="Hint"></span>   <div id="txtHint"></div>     <form name="Formy">   <input type="text" id="txt1" name="textchat"   onkeyUp="if(event.ctrlKey&&event.keyCode==13) Clicky(txt1.value,\''.htmlSpecialChars($_SESSION['login']).'\');">      <input type="reset" value="submit" name="submit" onclick="Clicky(txt1.value,\''.htmlSpecialChars($_SESSION['login']).'\');document.Formy.textchat.focus();">   </form>   <form action="off.php" method="get">  <input type="submit" name="exit" value="exit">  </form>       <script>  document.Formy.textchat.focus();  </script>
    clienthint.js
    PHP:
    function Clicky(comments,name){   xmlHttp=GetXmlHttpObject()   if (xmlHttp==null)     {     alert ("Your browser does not support AJAX!");     return;     }                var url="save.php";   url=url+"?comments=" comments;   url=url+"&name=" name;   url=url+"&sid="+Math.random();   xmlHttp.onreadystatechange=stateChan;   req.setRequestHeader('Accept-Charset''windows-1251');   xmlHttp.open("GET",url,true);   xmlHttp.send(null);     document.Formy.textchat.value="" ;     document.Formy.textchat.focus();   }
    save.php
    PHP:
    <?php  foreach ($_REQUEST as $field =>$value){  $$field=$value;  print "$field    =$value ";  } ?>
     
    #5 Dmitriy_ua, 16 Apr 2007
    Last edited: 16 Apr 2007
  6. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    У тебя php скрипт и html страница с Ajax в одной и той-же кодировке? И она указана в заголовке?
     
  7. Dmitriy_ua

    Dmitriy_ua Elder - Старейшина

    Joined:
    31 Aug 2006
    Messages:
    42
    Likes Received:
    6
    Reputations:
    -1
    да :(
    бывает такой глюк что на локалке работает через раз
    на EasyPHP.
    проблема точно в передаче, так как если переменные уже в пхп то русские возвращает нормально и спростой формы тоже, абракадабра только спомощю аякс запроса :( и в Опере, IE пашет нормально
     
  8. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Кстати, бока с Utf в опере и я заметил, особенно при отправке запроса на сервер.
    Чето там у них не это....
     
  9. Dmitriy_ua

    Dmitriy_ua Elder - Старейшина

    Joined:
    31 Aug 2006
    Messages:
    42
    Likes Received:
    6
    Reputations:
    -1
    даже е107 (e107_7.8_21-02-2007) с хвалёным плагтном для русского (ajax_chatbox_cp1251) не пашет :(
     
  10. Dmitriy_ua

    Dmitriy_ua Elder - Старейшина

    Joined:
    31 Aug 2006
    Messages:
    42
    Likes Received:
    6
    Reputations:
    -1
    да много написано про кадировки например здесь http://jsgt.org/mt/archives/01/000701.html (смотреть в опере, иначе не поймёте смысла )