name = encodeURIComponent("Привет");
xmlHttp.open("GET", "start.php?name=" + name, true);
xmlHttp.onreadystatechange = handleServerResponse;
xmlHttp.send(null);
то получаю в start.php переменную name так:
$name = iconv("UTF-8", "WINDOWS-1251", $_GET['name']);
при выполнении данной функции name = %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82
Вопрос как получить name = "Привет" в start.php
Спустя 40 минут, 9 секунд (18.01.2010 - 11:09) twin написал(а):
urldecode();
Спустя 18 минут, 51 секунда (18.01.2010 - 11:28) empty написал(а):
Функцию urldecode() уже пробывал применять, не помогает!
Полный листинг:
index.html
quickstart.js
quickstart.php
Полный листинг:
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251" />
<title>AJAX и PHP: quickstart</title>
<script type="text/javascript" src="quickstart.js"></script>
</head>
<body onload="process()">
Сервер желает узнать ваше имя <input type="text" id="myName" />
<div id="divMessage"></div>
</body>
</html>
quickstart.js
// Запомнить ссылку на объект XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();
// Создать объект XMLHttpRequest
function createXmlHttpRequestObject()
{
// Для хранения ссылки на объект XMLHttpRequest
var xmlHttp;
// Если сценарий запущен под управлением Internet Explorer
if (window.ActiveXObject)
{
try
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
xmlHttp = false;
}
}
// Если сценарий запущен под управлением Mozila или другого браузера
else
{
try
{
xmlHttp = new XMLHttpRequest();
}
catch (e)
{
xmlHttp = false;
}
}
// Вернуть созданный объект или вывести сообщение об ошибке
if (!xmlHttp)
{
alert("Ошибка создания объекта XMLHttpRequest");
}
else
{
return xmlHttp;
}
}
// Выполнить асинхронный запрос HTTP с помощью объекта XMLHttpRequest
function process()
{
// Работа возможна только если объект xmlHttp не занят
if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
{
// Получить имя введенное пользователем в форму
name = encodeURIComponent(document.getElementById('myName').value);
// Обратиться к сценарию quickstart.php на сервере
xmlHttp.open("GET", "quickstart.php?name=" + name, true);
// определить метод который будет обрабатывать ответы сервера
xmlHttp.onreadystatechange = handleServerResponse;
// Послать асинхронный запрос серверу
xmlHttp.send(null);
}
else
{
// Если соединение занято повторить попытку через одну секунду
setTimeout('process()', 1000);
}
}
function handleServerResponse()
{
// Продолжать можно только если транзакция с сервером завершена
if (xmlHttp.readyState == 4)
{
// Значение 200 говорит о том что транзакция с сервером прошла успешно
if (xmlHttp.status == 200)
{
// Извлечь XML, полученный от сервера
xmlResponse = xmlHttp.responseXML;
// Получить корневой элемент в структуре XML
xmlDocumentElement = xmlResponse.documentElement;
// Извлечь текстовое сообщение, которое находиться в первом
// дочернем элементе корневого узла
helloMessage = xmlDocumentElement.firstChild.data;
// Обновить текст сообщения на экране
document.getElementById('divMessage').innerHTML = '<i>' + helloMessage + '</i>';
setTimeout('process()', 1000);
}
else
{
alert("Ошибка при выполнении транзакции: " + xmlHttp.statusText);
}
}
}
quickstart.php
<?php
// Результат будем отправлять в формате XML
header('Content-Type: text/xml; charset=windows-1251');
// сгенерировать заголовок XML
echo '<?xml version="1.0" encoding="windows-1251" standalone="yes"?>';
//создаь элемент <response>
echo '<response>';
$name = iconv("UTF-8", "WINDOWS-1251", $_GET['name']);
//$name2 = urldecode($name1);
//$name = iconv( "CP1251", "UTF-8", $name2);
//$NameUsers = $_GET['name'];
$userNames = array("DIMA","Slava","ДИМА");
if (in_array(strtoupper($name), $userNames))
echo 'Здраствуйте '. htmlentities($name);
else if (trim($name) == '')
echo 'Напишите ваше имя';
else
echo htmlentities($name). ', имя не найденно!';
echo '</response>';
?>
Спустя 7 минут, 28 секунд (18.01.2010 - 11:36) twin написал(а):
А это почему так?
//$name2 = urldecode($name1);
//$name2 = urldecode($name1);
Спустя 6 минут, 51 секунда (18.01.2010 - 11:42) empty написал(а):
Попробовал не работает и закоментировал
Спустя 2 минуты, 18 секунд (18.01.2010 - 11:45) empty написал(а):
Пробовал по разному то что в коментариях это не то как я делал в рабочем примере и естественно может быть неправильно, а оставил для себя какие функции можно применять
Спустя 48 минут, 40 секунд (18.01.2010 - 12:33) twin написал(а):
Никак я не понмаю этих извращений. Ну аякс же работает исключительно на UTF-8. На кой фиг эти все туда-сюда конвертации. Отправляющий скрипт в какой кодировке?
Спустя 21 минута, 38 секунд (18.01.2010 - 12:55) empty написал(а):
Скрипт в кодировке cp1251. В скрипте js переделываю введенную русскую строку при помощи encodeURIComponent() и передаю в php скрипт
Спустя 1 час, 47 минут, 9 секунд (18.01.2010 - 14:42) twin написал(а):
Позволь полюбопытствовать. Что это за изыск?
чем не устроила человеческая htmlspecialchars()?
htmlentities($name)
чем не устроила человеческая htmlspecialchars()?
Спустя 16 часов, 59 минут, 49 секунд (19.01.2010 - 07:42) empty написал(а):
Убрал функцию htmlentities и все заработало нормально
twin спасибо
