Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.03.16;
Скачать: [xml.tar.bz2];

Вниз

Помогите с переводом JavaScript в Delphi   Найти похожие ветки 

 
Бакук ©   (2008-02-06 14:32) [0]

JavaScript:

var initCode = escape(dataForm.initialCode.value);
var secCode="";
for (i=0;i<initCode.length;i++)
secCode += String.fromCharCode(initCode.charCodeAt(i)^2);


Интересуют аналоги escape и fromCharCode в Delphi


 
Style ©   (2008-02-06 14:37) [1]

escape - urlEncode можно из IdGlobal.pas

fromCharCode - chr


 
Бакук ©   (2008-02-06 14:42) [2]

Не увидел UrlEncode/UrlDecode в Indy, хотя в интернете упоминается.


 
Style ©   (2008-02-06 14:43) [3]

хотя это не совсем urlEncode

Символы, числовые значения которых больше 255 будут представлены в формате %uxxxx.


 
Style ©   (2008-02-06 14:45) [4]

вырезка из IDGlobal


function URLEncode(const psSrc: string): string;
const
 UnsafeChars = " *#%<>"; {do not localize}
var
 i: Integer;
begin
 Result := ""; { do not localize }
 for i := 1 to Length(psSrc) do
 begin
   if (IndyPos(psSrc[i], UnsafeChars) > 0) or (psSrc[i] >= #$80) then
   begin
     Result := Result + "%" + IntToHex(Ord(psSrc[i]), 2); {do not localize}
   end
   else
   begin
     Result := Result + psSrc[i];
   end;
 end;
end;


только надо написать что если > 255 то переводить байт в юникод и записывать строку в формате %uXXXX.


 
Бакук ©   (2008-02-06 14:46) [5]

вот что нашел

http://www.soft32.ru/delphi.shtml?topic=syntax&title=encode_url


 
Style ©   (2008-02-06 14:49) [6]

<script>

document.write(escape("!@#$%^&*(){}[]=:/;?+\"""));

// %21@%23%24%25%5E%26*%28%29%7B%7D%5B%5D%3D%3A/%3B%3F+%27%22

</script>


заметь escape еще кодируют все вот эти символы

кроме

@*/+


 
Style ©   (2008-02-06 14:51) [7]


> http://www.soft32.ru/delphi.shtml?topic=syntax&title=encode_url


не могу посмотреть, прокси не пускает ;)


 
Style ©   (2008-02-06 15:28) [8]

в общем что-то вроде этого должно быть

function escape(const psSrc: widestring): string;
const
 UnsafeChars = "!#$%^&(){}[]=:;?\"+#39+"""; {do not localize}
var
 i: Integer;
begin
 Result := ""; { do not localize }
 for i := 1 to Length(psSrc) do
 begin
   if (Pos(psSrc[i], UnsafeChars) > 0) or (psSrc[i] >= #$80) then
   begin

     if (psSrc[i] >= #$255) then
     begin
     Result := Result + "%u" + IntToHex(Ord(psSrc[i]), 4); {do not localize}
     end
     else
     Result := Result + "%" + IntToHex(Ord(psSrc[i]), 2); {do not localize}
   end
   else
   begin
     Result := Result + psSrc[i];
   end;
 end;
end;


 
clickmaker ©   (2008-02-06 15:29) [9]


> "!#$%^&(){}[]=:;?\"+#39+"""; {do not localize}

а как это можно локализовать? o)


 
Style ©   (2008-02-06 15:54) [10]


> а как это можно локализовать? o)
>


это комментарий из idGlobal.pas
я сначала за копипастил функцию URLEncode(const psSrc: string): string;
затем переделал.

Так что все вопросы к Indy)


 
хам   (2008-02-06 15:56) [11]

> [10] Style ©   (06.02.08 15:54)
> Так что все вопросы к Indy)

Все вопрос ы к яндексу.


 
Style ©   (2008-02-06 16:25) [12]


> Все вопрос ы к яндексу.


нет, в данном случае именно к Indy.
Хотя как я понимаю, //{do not localize}  говорит о том что если не аккуратно
закопипастить, то могут в UnsafeChars = " *#%<>"; измениться коды перечисленных символов. Хотя не понятно на какой такой язык надо локализовать чтобы данные символы действительно изменились. 8-)


 
clickmaker ©   (2008-02-06 16:38) [13]

разве что вместо $ и # подставить р и № o)


 
Бакук ©   (2008-02-06 16:44) [14]

JavaScipt:

for (i=0;i<initCode.length;i++)
secCode += String.fromCharCode(initCode.charCodeAt(i)^2);


Delphi:
 for i := 0 to Length(AInitCode) do
   AResult := AResult + Chr(Ord(AInitCode[i]) * Ord(AInitCode[i]));


Где я ошибся?


 
clickmaker ©   (2008-02-06 16:45) [15]

Length(AInitCode) - 1
или High(AInitCode)


 
Бакук ©   (2008-02-06 16:45) [16]

Не так скопировал.


>   for i := 1 to Length(AInitCode) do
>     AResult := AResult + Chr(Ord(AInitCode[i]) * Ord(AInitCode[i]));
>
>


 
Бакук ©   (2008-02-06 16:47) [17]

Вход: Hello, world!

В жаваскрипте: Jgnnm"02umpnf"03
У меня: @Щђђ!


 
Style ©   (2008-02-06 16:57) [18]


>  for i := 0 to Length(AInitCode) do
>    AResult := AResult + Chr(Ord(AInitCode[i]) * Ord(AInitCode[i]));
> Где я ошибся?


Ну вопервых в string первый символ символ - это 1

во вторых - в функции Chr входной параметр типа Byte

function Chr(X: Byte): Char;

У тебя как видно получается код больше чем 255.
Значит нужно уже использовать widechar
а AResult должен быть типа widestring;

т.е. наверное так

Aresult: widestring;

for i := 0 to Length(AInitCode) do
   AResult := AResult + widechar(Ord(AInitCode[i]) * Ord(AInitCode[i]));


 
Style ©   (2008-02-06 16:58) [19]

про цикл забыл!
Aresult: widestring;

for i := 1 to Length(AInitCode) do
  AResult := AResult + widechar(Ord(AInitCode[i]) * Ord(AInitCode[i]));


 
Бакук ©   (2008-02-06 16:58) [20]

Хм.... ^ это не степень а XOR


 
Style ©   (2008-02-06 17:00) [21]


> Хм.... ^ это не степень а XOR
>


не думал что так считается степень
Ord(AInitCode[i]) * Ord(AInitCode[i])

:)


 
Бакук ©   (2008-02-06 17:03) [22]

Перемножение, т.е. 2 степень


 
Style ©   (2008-02-06 17:03) [23]

если xor тогда и widechar не нужен.


 
Бакук ©   (2008-02-06 17:04) [24]

И все таки

Яваскрипт возвращает jgnnm"02umpnf
Делфи возвращает jgnnm"umpnf

Подозреваю что проблема в Escape


 
Style ©   (2008-02-06 17:05) [25]


> Перемножение, т.е. 2 степень


да я что-то подумал  что ты разные числа перемножить пытаешься )

ЗЫ. смотрю в книгу вижу фигу - называется :)


 
Бакук ©   (2008-02-06 17:05) [26]

Сейчас это выглядит так:

 AInitCode := escape(AString);
 AResult := "";
 for i := 1 to Length(AInitCode) do
   AResult := AResult + Chr(Ord(AInitCode[i]) xor 2);


С пробелами вот проблема


 
Style ©   (2008-02-06 17:07) [27]

В UnsafeChars запятую еще добавь.


 
Style ©   (2008-02-06 17:08) [28]

и пробел


 
Style ©   (2008-02-06 17:11) [29]

а по хорошему посмотри вообще все символы которые escape кодирует

<script>

var i;
for (i = 0; i <= 255; i++)
{
 document.write(escape(String.fromCharCode(i)));
}

</script>


 
Бакук ©   (2008-02-06 17:42) [30]

Блин, все равно не те символы попадаются. Уже нашел в сети рекомендуемую функцию URL кодирования, но попадаются символы, отличные от оригинала.
А возможно ли выполнить
document.write(escape(ТЕКСТ)) и прочитать результат из делфи?


 
Style ©   (2008-02-06 17:56) [31]

вот так. проверил все символы от 0 до 255.

Сделал точно как в Escape только вот непонятно с русскими символами.

если их надо кодировать как %uXXXX то входным параметром должен быть widestring.

function escape(const psSrc: string): string;
const
 SafeChars =
 "*+"
+"-./"
+"0123456789"
+"@ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+"_abcdefghijklmnopqrstuvwxyz";
var
 i: Integer;
begin
 Result := "";
 for i := 1 to Length(psSrc) do
 begin
   if (Pos(psSrc[i], SafeChars) = 0) or (psSrc[i] >= #$80) then
   begin

     if (psSrc[i] > #255) then
     begin
     Result := Result + "%u" + IntToHex(Ord(psSrc[i]), 4);
     end
     else
     Result := Result + "%" + IntToHex(Ord(psSrc[i]), 2);
   end
   else
   begin
     Result := Result + psSrc[i];
   end;
 end;
end;


сейчас результат равен работе скрипта.


 
Бакук ©   (2008-02-06 18:01) [32]

И все равно нет.
Яваскрипт:
"0:dwlavkml"0:"0;"5@"2C-("2C"02("02hSwgp{"023

Делфи:
"0:dwlavkml"0:"0;"5@"2F"2C-("2F"2C"02("02hSwgp{"023


 
Бакук ©   (2008-02-06 18:02) [33]

Русских символов кстати нет


 
Style ©   (2008-02-06 21:06) [34]

Блин ну ты даешь.
У тебя код в Delphi и Jabascript"e отличается наличием %0D

угадай что это такое????

короче в Delphi это CRLF, т.е. #$0D#$0A , а в js только %0A
Я не знаю как там данные обрабатываются, но те данные которые приходят в функцию escape в js отличаются от тех которые приходят в escape delphi


 
korstin ©   (2008-02-07 03:47) [35]

обработай входную строку на наличие #13



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2008.03.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.009 c
15-1202479970
ketmar
2008-02-08 17:12
2008.03.16
чудные каменты…


8-1176911848
Unknowing
2007-04-18 19:57
2008.03.16
Рисование окружности с сглаживанием


2-1203488907
Димон
2008-02-20 09:28
2008.03.16
Клонирование форм


2-1203489542
allucard
2008-02-20 09:39
2008.03.16
Изменение событий


15-1202499449
Palladin
2008-02-08 22:37
2008.03.16
Хозяйкам на заметку





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский