Эта тема на forum.dklab.ru


Kesha V: Не передаются русские буквы в скрипты.
Добрый день.

У меня, возможно, чайниковский вопрос, но ответа на него я так и не нашел нигде. Может кто-то подскажет.
Я поставил Денвер и решил кое-что написать на PHP. Рассмотрим простейшую HTML страницу и скрипт-обработчик:

Страница

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>
<body>
<form action="test.php" method="get">
<input type="text" id="param" name="param" value=""><br>
<input type="submit" value="Отправить">
</form>
<script>
function LoadPG()
{
location.href="http://www.test1.ru/test.php?param=" + encodeURIComponent(document.getElementById('param').value);
}
</script>
<a href="#" onclick="javscript:LoadPG(); return false;">AAAA</a>
</body>
</html>


Код

<?php
echo $param;
?>


Если в форме в текстовое поле ввести слово "тест" и нажать кнопку, то скрипт возвращает это слово после вызова.
А если ввести слово "тест" и нажать на ссылку, то скрипт на входе получает кракозяблы. Ведь по идее он должен раскодировать параметры при получении и передавать их в скрипт. Подскажите пожалуйста, каким образом заставить PHP правильно понимать параметры ?

Как я заметил, при отправке формы русские буквы кодируются с помощью одного байта, типа так:

test.php?param=%F2%E5%F1%F2


А функция encodeURIComponent кодирует двумя байтами и получается так:


test.php?param=%D1%82%D0%B5%D1%81%D1%82


Скажите, как обойти эту проблему ?

Заранее спасибо.
Никита Косолaпов:
почитайте тут:
http://xhtml.ru/2006/05/25/encodestring/print/
zaxar:
Это не кракозябры, а текст в кодировке UTF-8.

А если вместо


function LoadPG()
{
location.href="http://www.test1.ru/test.php?param=" + encodeURIComponent(document.getElementById('param').value);
}


написать


function LoadPG()
{
location.href="http://www.test1.ru/test.php?param=" + document.getElementById('param').value;
}


то тогда данные приходят корректно. По крайней мере, в IE6.

Рассмотрите также вариант перекодирования строки в php-скрипте из UTF-8 в Windows-1251, если его "запросили" по ссылке.
Kesha V:
Я уже решил проблему с помощью перекодирования входных параметров.


iconv('UTF-8', 'CP1251', $string);

Эта тема на forum.dklab.ru