Javascript-форум (https://javascript.ru/forum/)
-   Я не знаю javascript (https://javascript.ru/forum/ya-ne-znayu-javascript/)
-   -   URL с русскими буквами (https://javascript.ru/forum/ya-ne-znayu-javascript/3831-url-s-russkimi-bukvami.html)

runa 27.05.2009 15:37

URL с русскими буквами
 
в java скрипте формируется url для запроса методом get
обрабатывается в файле "файл.cgi"

url="файл.cgi"+"?fam="+str1+"&fio="+str2;
oXml.open('GET', url, true);

(используется Ajax)
возникает ошибка при выполнении Opera и Mozilla,
говорит, что не найден файл с именем файл.cgi
пробовала использовать escape(), encodeURI(), encodeURIComponent()
результат тот же.
возможно, что просто неправильно писала
Изменить имя файла нельзя.
Помогите, пожалуйста

x-yuri 28.05.2009 04:29

код странички в студию

runa 28.05.2009 08:50

это код чисто java скрипта
function lfunction()
{
  if(typeof(XMLHttpRequest)!='undefined'){
  var getXMLHttpObj = function(){ return new XMLHttpRequest(); }
} 
  else {
  var getXMLHttpObj = function()
  {
    var activeXObjects = ['Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0',
    'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'];

    for(var i=0; i<activeXObjects.length; i++)
   {
      try
       {return new ActiveXObject(activeXObjects[i]);}
      catch(err){}
   }
  }
}
var oXml = getXMLHttpObj();
var str1=escape(document.all.fam.value);
var str2=escape(document.all.fio.value);
url="файл.cgi"+"?fam="+str1+"&fio="+str2;

oXml.open('GET', url, true);
oXml.onreadystatechange = processingFunction;
oXml.send(null);

function processingFunction()
	{
  if(oXml.readyState!=4) return; // запрос не выполнен 
  var xmlDoc = oXml.responseText.split("|");
  document.all.form.innerHTML = '<PRE><b><i>Полученные данные:</i><p>Фамилия:  </b>'+unescape(xmlDoc[0])+'</p>'+'<p><b>Должность:</b>'+unescape(xmlDoc[1])+'</p></PRE>';
	}
}

кусок страницы (по нажатию кнопки вызывается скриптик)
<form name="form1" method="get" action="файл.cgi">    
        <div align="left">
	  <p align="left"> Фамилия: <input name="fam" type="text" id="fam" size="20" length="25"</p>
	  <p align="left"> Должность: <input name="fio" type="text" id="fio" size="20" length="25"</p>
	  <p align="left">
            <input type="button" name="send" id="send" value="Отправить" onclick="lfunction()">
        </p>
 </form>


скипт файл.cgi
#!/usr/bin/perl -w
print "Content-Type: text/xml\n\n";
$q=$ENV{QUERY_STRING};
@q=split(/&/,$q);
foreach $a (@q)
{
 @vars=split(/=/,$a,2);
 $q{$vars[0]}=$vars[1];
}

print $q{"fam"};
print("|"); 
print $q{"fio"};

x-yuri 28.05.2009 09:14

а зачем русские буквы в имени файла?

runa 28.05.2009 09:22

я понимаю, что так никто не делает.
Просто суть в том чтобы научиться работать с кодировками.
И в данном случае имя обязательно должно быть русским.

runa 28.05.2009 09:33

escape() работает с русскими значениями в полях ввода
но для url не получатся
возможно надо сделать обратное преобразование в файл.cgi?
меня смущает, что ошибка состоит в том, что сам
файл.cgi was not found on this server, хотя он рядышком лежит

Gvozd 28.05.2009 09:38

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

http://javascript/%D1%84%D0%B0%D0%B9%D0%BB.htm?fam=qwe&fio=qwe
при попытке доступа к рускоязычному скрипту(я вставил PHP-скрипт) у меня поплыл интепретатор почему-то, и начал выдавать неведомое
поставьте firebug под Mozilla , и проверьте что он выдаст

Kolyaj 28.05.2009 09:51

Цитата:

Сообщение от runa
Просто суть в том чтобы научиться работать с кодировками.

Но при чем здесь кириллические названия файлов?

runa 28.05.2009 10:19

спасибо, я попробую firebug
я уверена, что скрипт выполняется.
если имя скрипта поменять на нормальное, то все отлично работает

runa 28.05.2009 13:07

The requested URL /web_server/5/лаба.cgi was not found on this server.

Firebug показывает вменяемый URL:
"%D0%BB%D0%B0%D0%B1%D0%B0.cgi?fam=dfs&fio=gds"

совсем не понимаю в чем дело

добавила в скрипт файл.cgi код для обратного перевода в русские буквы-не работает

Kolyaj 28.05.2009 13:34

Цитата:

Сообщение от runa
совсем не понимаю в чем дело

Дело в том, что не надо использовать кириллицу в именах файлов.

x-yuri 28.05.2009 13:43

Цитата:

совсем не понимаю в чем дело
дело в том, что сервер не может знать, в какой кодировке ты ему передаешь путь к файлу с русскими символами (информация о кодировке отсутствует)

есть вариант перехватывать такие запросы с помощью mod_rewrite

runa 29.05.2009 13:28

дело в том, что я могу сделать это только используя код скриптов.
Просто я студентка и прав на администрирование у меня нет, а преподаватель требует, чтобы работал скрипт с русским именем.
Я пыталась закодировать имя с помощью encodeURI, а потом обратно в cgi - не помогло

x-yuri 29.05.2009 13:55

Цитата:

а преподаватель требует, чтобы работал скрипт с русским именем
это из серии "наказание для музыкантов: отбывание срока в оркестровой яме"?

тогда с помощью php-функции urlencode (или других средств) преобразовываем имя файла в разных кодировках (cp1251, utf-8, koi-8) и отправляем серверу и да поможет...

runa 29.05.2009 14:46

ага, :)
поделюсь результатами

runa 30.05.2009 07:05

проблему можно решить, если перекодировать URL в из win в utf
есть скрипт на perl, который это делает
проблема в том, чтобы вызвать его по событию кнопки submit, передать туда url, а потом ajax должен схватить готовый url
Такое реально сделать? Если да, то помогите с командами

x-yuri 30.05.2009 07:33

надо запустить этот perl-скрипт (если он поможет) 1 раз , чтобы узнать URL, по которому надо обращаться к файл.cgi ;)
а вообще это вручную сделать можно:
php -r "echo urlencode(iconv('cp1251', 'utf-8', 'файл.cgi'))"
(+ поэкспериментировать с кодировкой-назначением, 2-ая)

runa 30.05.2009 09:37

скрипт только заменяет русские буквы на нужную кодировку через регулярные выражения.
мне нужно направить туда url, чтобы потом скрипт с ajax получил этот url.
url формируется при отпраке методом get и все происходит по нажатию одной кнопки, а запустить надо аж три скрипта:
1 обработки url (.pl)
2 ajax (.js)
3 скрипт обработки данных (файл.cgi)

x-yuri 30.05.2009 10:48

подожди, ты чего хочешь? Реализовать свое сложное, нерациональное решение (+ возможно оно не решит твою проблему)? Или ты хочешь решить свою проблему?

runa 30.05.2009 11:00

понимаешь, у меня очень ограниченные возможности
максимум возможностей это закинуть скрипты на сервер, больше никаких вариантов нет!
я не упрямая, правда :)

x-yuri 30.05.2009 11:11

я понимаю. А какая операционка на сервере?
кроме того, попробуй в браузере перейти на http://example.com/%D1%84%D0%B0%D0%B9%D0%BB.cgi или http://example.com/%F4%E0%E9%EB.cgi
(это если файл.cgi находится в корне сервера, иначе нужно скорректировать путь)

Geddar 31.05.2009 10:47

http://getfirebug.com/

x-yuri 31.05.2009 10:54

ну и к чему он тут?

Geddar 31.05.2009 14:25

Просто, Gvozd, битую ссылку дал:)

Gvozd 31.05.2009 14:28

не надо ля-ля
гвозь дал нормальную такую ссылку
именно так у меня в системе и выглядит
на денвере тестил
только поменять путь, и расширение, и именно так у меня было бы в вашем случае
x-yuri, не зря спросил про ось у вас
это очень влияет


Часовой пояс GMT +3, время: 18:52.