URL с русскими буквами
в java скрипте формируется url для запроса методом get
обрабатывается в файле "файл.cgi" url="файл.cgi"+"?fam="+str1+"&fio="+str2; oXml.open('GET', url, true); (используется Ajax) возникает ошибка при выполнении Opera и Mozilla, говорит, что не найден файл с именем файл.cgi пробовала использовать escape(), encodeURI(), encodeURIComponent() результат тот же. возможно, что просто неправильно писала Изменить имя файла нельзя. Помогите, пожалуйста |
код странички в студию
|
это код чисто 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"}; |
а зачем русские буквы в имени файла?
|
я понимаю, что так никто не делает.
Просто суть в том чтобы научиться работать с кодировками. И в данном случае имя обязательно должно быть русским. |
escape() работает с русскими значениями в полях ввода
но для url не получатся возможно надо сделать обратное преобразование в файл.cgi? меня смущает, что ошибка состоит в том, что сам файл.cgi was not found on this server, хотя он рядышком лежит |
а вы уверены, что сам файл выполняется?
у меня просто сейчас на загрузке статичной страницы ваш код более чем отлично отработал ссылка на страницу получилась такого рода: Код:
http://javascript/%D1%84%D0%B0%D0%B9%D0%BB.htm?fam=qwe&fio=qwe поставьте firebug под Mozilla , и проверьте что он выдаст |
Цитата:
|
спасибо, я попробую firebug
я уверена, что скрипт выполняется. если имя скрипта поменять на нормальное, то все отлично работает |
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 код для обратного перевода в русские буквы-не работает |
Цитата:
|
Цитата:
есть вариант перехватывать такие запросы с помощью mod_rewrite |
дело в том, что я могу сделать это только используя код скриптов.
Просто я студентка и прав на администрирование у меня нет, а преподаватель требует, чтобы работал скрипт с русским именем. Я пыталась закодировать имя с помощью encodeURI, а потом обратно в cgi - не помогло |
Цитата:
тогда с помощью php-функции urlencode (или других средств) преобразовываем имя файла в разных кодировках (cp1251, utf-8, koi-8) и отправляем серверу и да поможет... |
ага, :)
поделюсь результатами |
проблему можно решить, если перекодировать URL в из win в utf
есть скрипт на perl, который это делает проблема в том, чтобы вызвать его по событию кнопки submit, передать туда url, а потом ajax должен схватить готовый url Такое реально сделать? Если да, то помогите с командами |
надо запустить этот perl-скрипт (если он поможет) 1 раз , чтобы узнать URL, по которому надо обращаться к файл.cgi ;)
а вообще это вручную сделать можно: php -r "echo urlencode(iconv('cp1251', 'utf-8', 'файл.cgi'))" (+ поэкспериментировать с кодировкой-назначением, 2-ая) |
скрипт только заменяет русские буквы на нужную кодировку через регулярные выражения.
мне нужно направить туда url, чтобы потом скрипт с ajax получил этот url. url формируется при отпраке методом get и все происходит по нажатию одной кнопки, а запустить надо аж три скрипта: 1 обработки url (.pl) 2 ajax (.js) 3 скрипт обработки данных (файл.cgi) |
подожди, ты чего хочешь? Реализовать свое сложное, нерациональное решение (+ возможно оно не решит твою проблему)? Или ты хочешь решить свою проблему?
|
понимаешь, у меня очень ограниченные возможности
максимум возможностей это закинуть скрипты на сервер, больше никаких вариантов нет! я не упрямая, правда :) |
я понимаю. А какая операционка на сервере?
кроме того, попробуй в браузере перейти на http://example.com/%D1%84%D0%B0%D0%B9%D0%BB.cgi или http://example.com/%F4%E0%E9%EB.cgi (это если файл.cgi находится в корне сервера, иначе нужно скорректировать путь) |
|
ну и к чему он тут?
|
Просто, Gvozd, битую ссылку дал:)
|
не надо ля-ля
гвозь дал нормальную такую ссылку именно так у меня в системе и выглядит на денвере тестил только поменять путь, и расширение, и именно так у меня было бы в вашем случае x-yuri, не зря спросил про ось у вас это очень влияет |
Часовой пояс GMT +3, время: 18:52. |