PDA

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


GHostly_FOX
28.03.2007, 09:14
У меня такая трабла:
Я тока начал изучать технологию AJAX написал небольшой скрипт который передается моему PHP файлу параметры и затем показывает результат, но тут одно проблема, после вывода на экран результатов весь русский текст становится вопросами, я решил проверить, создал отдельный РНР скрипт который просто бы считывал данные сам с себя и сохранил его в UTF-8 (Благо EditPlus 2 позволяет это сделать), так после проверки кода все начало работать...
Как мне быть?! простое перекодирование текста в UTF-8 командой utf8_encoding непомогает, ниже приведен код скрипта:

<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>

DIAgen
28.03.2007, 12:18
Почитай вот тут http://dklab.ru/lib/JsHttpRequest/
и разбери класс для работы с AJAX, и тогда ты найдешь ответ на свой вопрос.

SMiX
28.03.2007, 18:30
req.setRequestHeader('Accept-Charset', 'windows-1251'); Должно помочь

Helios
28.03.2007, 20:20
req.setRequestHeader('Accept-Charset', 'windows-1251'); Должно помочь
Все так, но, судя по его посту, нужна кодировка UTF-8, а не cp1251, поэтому:

req.setRequestHeader('Accept-Charset', 'utf-8');

Dmitriy_ua
16.04.2007, 11:01
подскажыте куда ставить этот заголовок
req.setRequestHeader('Accept-Charset', 'utf-8');
если ставлю
перед
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);

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

index.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

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 foreach ($_REQUEST as $field =>$value){ $$field=$value; print "$field =$value "; } ?>

hidden
16.04.2007, 11:21
У тебя php скрипт и html страница с Ajax в одной и той-же кодировке? И она указана в заголовке?

Dmitriy_ua
16.04.2007, 13:26
да :(
бывает такой глюк что на локалке работает через раз
на EasyPHP.
проблема точно в передаче, так как если переменные уже в пхп то русские возвращает нормально и спростой формы тоже, абракадабра только спомощю аякс запроса :( и в Опере, IE пашет нормально

Helios
16.04.2007, 23:19
Кстати, бока с Utf в опере и я заметил, особенно при отправке запроса на сервер.
Чето там у них не это....

Dmitriy_ua
16.04.2007, 23:25
даже е107 (e107_7.8_21-02-2007) с хвалёным плагтном для русского (ajax_chatbox_cp1251) не пашет :(

Dmitriy_ua
16.04.2007, 23:48
да много написано про кадировки например здесь http://jsgt.org/mt/archives/01/000701.html (смотреть в опере, иначе не поймёте смысла )