Показать полную графическую версию : Искажение русского при передаче данных через XML форму на исполнение скрипту
Midnight-Ghost
14-05-2007, 07:23
Приветствую всех!
Помоги пожалуйста. Пишу портал на С++. Всё почти дописано, новыяснилась одна проблема: например есть форма для ввода данных о пользователе. Пользователь вбивает данные и вместо русского текста в адрессной строке появляется что-то вроде "%26%231091%3B%26%231091%3B%26%". Кодировка стоит uft8 международная. Да даже пробовал и cp1251 ставить - не помогает. В то же время помню, что видел много сайтов, где в адрессной строке фигурирует русский текст и не искажается.
Люди, кто-нить знает как устранить эту проблему?
Помогите пожалуйста! Заранее всем спасибо!
PS. Или может есть способ передать данные из формы без искажений? Я так посмотрел, что даже если где-то вырыть какая буква в какие иероглифы превращается и писать декриптовцик, а статья(добавленная через окно формы) будет в раёне там 1500 символов то это пардон не хилая нагрузка на проц сервака... А если ещё и пользователей, каторые такое добавляют много, то и сервак повиснуть может.
Вобщем помогите с рещением данной проблемы пожалуйста.
Vlad Drakula
14-05-2007, 08:00
Midnight-Ghost
это не есть проблема, вске так и должно быть
при отсылке информации на сервер броузер кодирует данные, а при приеме они автоматичевски декодируются
для передачи больших объемов данные есть POST параметры запроса.
1) а причем здесь XML?
2) зачем писать веб портал на С++ ? чем вас язики преднозначенные для этих целей не устроили?
Midnight-Ghost
14-05-2007, 08:13
Ну не знаю, больше нравится когда всё написано самим, нету глюком и точно знаешь где дырки заделывать.
Насчёт того, что это не есть проблема. У меня знаковый на ПХП писать пробовал. У него та же самая проблема была. Данные отправляются на сервер в вот таком "закодированном" виде и именно в этом виде он их вбивает в базу данных MySQL. Так как декодировать такую отсылку данных?
Вот собственно задача: путь даже есть форма с единственным полем ввода например, далее идёт метод POST/GET, и передаются данные на обработку части программы которая должна эти данные записать в базу данных, но не в искажённом виде. Поскольку, как среди таких иероглифов можно поиск осущесвить?
Посмотрел книку по ПХП, всё равно - принцип тот же: данные из формы идут ввиде запроса типа: http://somehost/script?name=%D0%B0%D0%B2%D0%B0%D0%B2%D1 , затем идёт анализ, берётся строка запроса, тоесть всё, что после знака "?" и идёт анализ данных. Вот скажите, наверняка ведь кто-нить это делал, как получить нормальное значение того что записано "name="?
PS. Вот даже просто из спортивного интереса проверил, если пытаться такой искажённый текст прочитать из базы данных(тоесть вывести на интернет страницу, то они такими искажёнными и выводятся). Неужели нету способа в нормальном виде получить данные?
Vlad Drakula
14-05-2007, 12:58
Midnight-Ghost
1) а кто вообще оанлизурует в ручную строку запроса? $_GET['name'] - вернет искомое значение!
2) что мешает все написать руками на PHP?
Midnight-Ghost
17-05-2007, 05:47
На PHP я не хочу писать, хотябы потому, что он идёт как OPEN SOURCE, тоесть получив такой скрипт, пользователь сможет их нагло ставить себе пачками, в то время, как в С++ ему исходников не будет. Вот в принципе главная причина. А платить за всякие энкодеры для ПХП которые ещё и системные ресурсы хавают и лаве хороших стоят - увольте
Люди, ну не знаю я, хоть башкой об стенку стучись, гляньте плиз... вот код:char querry[1024] = "";
string query ="";
int contentLength = 0;
string lang = "";
string category = "";
string word = "";
string caption = "";
if(getenv("CONTENT_LENGTH"))
{
contentLength = atoi(getenv("CONTENT_LENGTH"));
cin.read(querry, contentLength);
query = querry;
int langlocation = query.find ( "lang=" )+5;
int langend = query.find ("&category");
lang = query.substr(langlocation, langend - langlocation);
int categorylocation = query.find ( "category=" )+9;
int categoryend = query.find ("&word");
category = query.substr(categorylocation, categoryend - categorylocation);
int wordlocation = query.find ( "word=" )+5;
int wordend = query.find ("&caption");
word = query.substr(wordlocation, wordend - wordlocation);
int captionlocation = query.find ( "caption=" )+8;
int captionend = query.find ("&");
caption = query.substr(captionlocation, captionend - captionlocation);
cout<<"Result:\n"<<lang<<"\n"<<category<<"\n"<<word<<"\n"<<caption;
}
if(query=="")
{
cout<<"<center>Space Logic Board Translator</center>";
cout<<"<table>"
<<"<form method = \"post\">"
<<"<tr>"
<<"<td>Выбрать язык для редактирования:</td>"
<<"<td><select name=\"lang\" size=\"0\"><option value=\"1\" >English</option><option value=\"rus\">Russian</option></td>"
<<"</tr>"
<<"<tr>"
<<"<td>Категория:</td>"
<<"<td><select name=\"category\" size=\"0\"><option value=\"Registration\" >Registration</option><option value=\"Main\">Main</option></td>"
<<"</tr>"
<<"<tr>"
<<"<td>Переменная:</td>"
<<"<td><input type=\"text\" name=\"word\"></td>"
<<"</tr>"
<<"<tr>"
<<"<td>Перевод:</td>"
<<"<td><input type=\"text\" name=\"caption\"></td>"
<<"</tr>"
<<"</table>"
<<"<input type =\"submit\" value=\"Install Engine\"></form>";
рабочий скрипт висит тут: скрипт (http://spacelogic.eu/cgi-bin/spacelogic.cgi)
Midnight-Ghost
17-05-2007, 07:21
PS. Кто-нибудь может посоветовать, где найти стандарты кодировок? Ну тоесть в каких кодировках какие символы чему соответствуют, чтоб тогда можно было декодировать вручную?
Vlad Drakula
17-05-2007, 11:06
Midnight-Ghost
нужно наверное искать на стандарты перекодирования а уже готовую библиотесную функцию!
гугль очень полезная штука если знать что искать: http://www.google.ru/search?hl=ru&q=C%2B%2B+url+decode&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=
прямо сверху очень много инвы о кодировании декодировании строк
Midnight-Ghost
17-05-2007, 18:55
Ну насчёт готовой функции.... это не обязательно, иначе зачем программисту мозги? Но за ссылку спасибо! Вобщем нащёл форум разработциков, которые объяснили формулу кодирования ASCII и там всего выходит 2 варианты: 1) если встречается символ "+" его заменить на пробел, если же %5D или тому похожее по формуле вычислить десятичное значение и это значение превратить в char. За минут пять написать можно. Вобщем спасибо Вам, Vlad Drakula. Думаю тему закрыть можно. Всем удачи!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.