[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с функцией iconv
empty
Доброго времени суток. Совсем не давно начал заниматься web-программированием, и... споткнулся на кодировках, точнее на преобразованиях одной в другую, когда при помощи js передаю:

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

<!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);

Спустя 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 написал(а):
Позволь полюбопытствовать. Что это за изыск?
htmlentities($name)

чем не устроила человеческая htmlspecialchars()?

Спустя 16 часов, 59 минут, 49 секунд (19.01.2010 - 07:42) empty написал(а):
Убрал функцию htmlentities и все заработало нормально user posted image twin спасибо
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.