Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Завтра :

День славянской письменности и культуры


Русская кодировка в AJAX


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Пол:Муж Caesar
Новичок


Возраст: 23
Знак зодиака: Водолей
Зарегистрирован: 11.07.2008
Сообщения: 8
Откуда: г.Саранск
СообщениеЧт, 19-Авг-2010 13:11    Заголовок сообщения: Русская кодировка в AJAX
Цитата

Уважаемые гуру, я вот изучаю технологию AJAX. Исполняю следующий код, когда ввожу английские символы, все ок, но стоит ввести русские, как возникает в файерфоксе это:
Цитата:
Ошибка синтаксического анализа XML: неопределённая сущность Адрес: http://localhost/ajax/quickstart/quickstart.php?name=%D0%B2 Строка 1, символ 49:

Что мне делать?
файл index.html
HTML:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>AJAX with PHP: Quickstart</title>
  4.     <script type="text/javascript" src="quickstart.js"></script>
  5.   </head>
  6.   <body onload='process()'>
  7.     Server wants to know your name:
  8.     <input type="text" id="myName" />
  9.     <div id="divMessage" />
  10.   </body>
  11. </html>


файл quickstart.js
Javascript:
  1. // stores the reference to the XMLHttpRequest object
  2. var xmlHttp = createXmlHttpRequestObject();
  3.  
  4. // retrieves the XMLHttpRequest object
  5. function createXmlHttpRequestObject()
  6. {   
  7.   // will store the reference to the XMLHttpRequest object
  8.   var xmlHttp;
  9.   // if running Internet Explorer
  10.   if(window.ActiveXObject)
  11.   {
  12.     try
  13.     {
  14.       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  15.     }
  16.     catch (e)
  17.     {
  18.       xmlHttp = false;
  19.     }
  20.   }
  21.   // if running Mozilla or other browsers
  22.   else
  23.   {
  24.     try
  25.     {
  26.       xmlHttp = new XMLHttpRequest();
  27.     }
  28.     catch (e)
  29.     {
  30.       xmlHttp = false;
  31.     }
  32.   }
  33.   // return the created object or display an error message
  34.   if (!xmlHttp)
  35.  
  36.     alert("Error creating the XMLHttpRequest object.");
  37.   else
  38.     return xmlHttp;
  39. }
  40.  
  41. // make asynchronous HTTP request using the XMLHttpRequest object
  42. function process()
  43. {
  44.   // proceed only if the xmlHttp object isn't busy
  45.   if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
  46.   {
  47.     // retrieve the name typed by the user on the form
  48.     name = encodeURIComponent(document.getElementById("myName").value);
  49.     // execute the quickstart.php page from the server
  50.     xmlHttp.open("GET", "quickstart.php?name=" + name, true)
  51.     // define the method to handle server responses
  52.     xmlHttp.onreadystatechange = handleServerResponse;
  53.     // make the server request
  54.     xmlHttp.send(null);
  55.   }
  56.   else
  57.     // if the connection is busy, try again after one second 
  58.     setTimeout('process()', 1000);
  59. }
  60.  
  61. // executed automatically when a message is received from the server
  62. function handleServerResponse()
  63. {
  64.   // move forward only if the transaction has completed
  65.   if (xmlHttp.readyState == 4)
  66.   {
  67.     // status of 200 indicates the transaction completed successfully
  68.     if (xmlHttp.status == 200)
  69.     {
  70.       // extract the XML retrieved from the server
  71.       xmlResponse = xmlHttp.responseXML;
  72.       // obtain the document element (the root element) of the XML structure
  73.       xmlDocumentElement = xmlResponse.documentElement;
  74.       // get the text message, which is in the first child of
  75.       // the the document element
  76.       helloMessage = xmlDocumentElement.firstChild.data;
  77.       // update the client display using the data received from the server
  78.       document.getElementById("divMessage").innerHTML =
  79.                                             '<i>' + helloMessage + '</i>';
  80.       // restart sequence
  81.       setTimeout('process()', 1000);
  82.     }
  83.     // a HTTP status different than 200 signals an error
  84.     else
  85.     {
  86.       alert("There was a problem accessing the server: " + xmlHttp.statusText);
  87.     }
  88.   }
  89. }


файл quickstart.php
php:
  1. <?php
  2. // we'll generate XML output
  3. header('Content-Type: text/xml');
  4. // generate XML header
  5. echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
  6. // create the <response> element
  7. echo '<response>';
  8.  
  9. // retrieve the user name
  10. $name = $_GET['name'];
  11. // generate output depending on the user name received from client
  12. $userNames = array('CRISTIAN', 'BOGDAN', 'FILIP', 'MIHAI', 'YODA');
  13. if (in_array(strtoupper($name), $userNames))
  14.   echo 'Hello, master ' . htmlentities($name) . '!';
  15. else if (trim($name) == '')
  16.   echo 'Stranger, please tell me your name!';
  17. else
  18.   echo htmlentities($name) . ', I don\'t know you!';
  19. // close the <response> element
  20. echo '</response>';
  21. ?>

_________________
Лучше быть первым в деревне - чем вторым в Риме!
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Пол:Муж orlov_ds
Модератор


Возраст: 31
Знак зодиака: Рак
Зарегистрирован: 14.04.2004
Сообщения: 1723
Откуда: Новосибирск
СообщениеПт, 20-Авг-2010 5:13 
Цитата

При использовании AJAX, могут возникнуть проблемы с передачей русских букв между скриптами независимо от метода (GET или POST). Решением является:
1. явное указание кодировки
На клиентской части это
HTML:
  1. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

, на серверной (php) -
HTML:
  1. header("Content-type: text/html; charset=windows-1251");

2. ручная перекодировка
при отправке из javascript применять функцию encodeURIComponent, которая кодирует в Unicode
php:
  1. req.send('param='+encodeURIComponent('привет мир'));

в серверной части приводим к нужной кодировке с помощью iconv
php:
  1. iconv("UTF-8", "WINDOWS-1251", $param);

_________________
Хорошо излагает, зараза! Учитесь, Киса!
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Пол:Муж Caesar
Новичок


Возраст: 23
Знак зодиака: Водолей
Зарегистрирован: 11.07.2008
Сообщения: 8
Откуда: г.Саранск
СообщениеПт, 20-Авг-2010 12:26 
Цитата

Я это все делал и поиском пользоваться умею. Но проблема в том, что я все это сделал, ошибка перестала появляться, но стали появляться кракозябрики.
Самое интересное, что вот эта строчка в коде присутствует, но не работает!
Javascript:
  1. name = encodeURIComponent(document.getElementById("myName").value);

_________________
Лучше быть первым в деревне - чем вторым в Риме!
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100