/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
URL dekodning
Fra : Morten Bakkedal


Dato : 29-11-00 19:13

Finder der nogle rutiner til at afkode en tekststreng sendt gennem en URL
til normal tekst. Således ønsker jeg f.eks.

%2B%22en+s%F8getekst%22+%2Bcomputer

afkodet tilbage til

+"en søgetekst" +computer

Jeg bruger Free Pascal til Linux.

Mvh.

Morten Bakkedal




 
 
Thomas Due (30-11-2000)
Kommentar
Fra : Thomas Due


Dato : 30-11-00 08:47

Du kan f.eks. lave en løkke som løber url'en igennem, og kopiere indholdet
tegn for tegn over i
en anden streng. Hvis du så render over et '%' så skal du så foretage dig
noget specielt.

Det specielle består i at oversætte tallene efter procent tegnet til noget
forståeligt. Du ved at der
altid er to tegn og de repræsenterer en hexadecimal værdi. Der til er let
nok. Problemet kommer
ved at man ikke direkte kan oversætte Hex (på textform) til integer. Du
bliver måske nok nødt til
at skrive en rutine som "oversætter" hex til int.

Jeg vedlægger en her som ganske givet kan forbedres, men den virker
ihvertfald. Om den så skal
tilpasses Free Pascal, eller om du kan bruge den uændret skal jeg ikke kunne
sige.

Function HexToInt(hex : String) : Integer;
Var len, idx,
mul, val : Integer;
ch : Char;
begin
len := Length(hex);
mul := 1;
val := 0;
for idx := len downto 1 do
begin
ch := hex[idx];
case ch of
'0' .. '9' : val := val + StrToIntDef(ch, 0) * mul;
'A', 'a' : val := val + 10 * mul;
'B', 'b' : val := val + 11 * mul;
'C', 'c' : val := val + 12 * mul;
'D', 'd' : val := val + 13 * mul;
'E', 'e' : val := val + 14 * mul;
'F', 'f' : val := val + 15 * mul;
end;
mul := mul * 16;
end;
Result := val;
end;

Mvh
Thomas Due

"Morten Bakkedal" <mbb@fys.ku.dk> wrote in message
news:903gvr$agl$1@news.inet.tele.dk...
> Finder der nogle rutiner til at afkode en tekststreng sendt gennem en URL
> til normal tekst. Således ønsker jeg f.eks.
>
> %2B%22en+s%F8getekst%22+%2Bcomputer
>
> afkodet tilbage til
>
> +"en søgetekst" +computer
>
> Jeg bruger Free Pascal til Linux.
>
> Mvh.
>
> Morten Bakkedal
>
>
>



Thomas Due (30-11-2000)
Kommentar
Fra : Thomas Due


Dato : 30-11-00 10:07

Hej,

En lille opfølgning. Jeg kom til at sidde og lege med HexToInt, for at sikre
den imod
fejl, f.eks. overløb. Og så kunne det jo være sjovt om man kunne få den til
at anvende
signed integers (altså at man kan angive negative tal).

Så kom jeg til at tænke på en finurlighed jeg faldt over for et stykke tid
siden.
Hvis man konvertere en streng til integer med StrToInt (eller StrToIntDef)
så får man
selvfølgelig oversat sin streng til et tal, hvis ellers det er lovligt. Jeg
skulle afprøve noget
og opdagede så at der er en lille udokumenteret "feature" i StrToInt.

Der anvendes Val til at oversætte og val checker rent faktisk for om tallet
er hexadecimal.

Så hvis man gør følgende istedet for den voldsomme function jeg listede
tidligere, så lader man
Delphi selv gøre alt arbejdet, og man slipper for at checke strengen for
fejl i hoved og r*v.

Function HexToInt(hex : String) : Integer;
begin
Result := StrToIntDef('x'+hex, 0);
end;

Ved at sætte et 'x' eller '$' foran strengen angives at det er et
hexadecimalt tal og det bliver så
returneret som en signed 32-bit, altså en Integer. Man skal derfor være
opmærksom på
at for at få negative tal skal man over $7FFFFFFF. $FF er f.eks. stadigvæk
255, og ikke -1.

Det var en længere smøre, men forhåbentlig kan den bruges til noget.

Mvh
Thomas Due



N/A (01-12-2000)
Kommentar
Fra : N/A


Dato : 01-12-00 08:17



Thomas Due (01-12-2000)
Kommentar
Fra : Thomas Due


Dato : 01-12-00 08:17

Hvis du kan finde en specifikation for URL, så må det kunne lade sig gøre at
finde
ud af hvad for et tegnsæt der bruges. Problemet er jo at Latin-1 er Linux, i
Windows
hedder det typisk ANSI, eller Western European, og på Mac hedder det ganske
givet noget tredje.

Det er dog mit indtryk at for en almindelig ascii tabel vil de første 127
karaktere altid være
de samme (muligvis med undtagelse af asiatiske og arabiske tabler). Det vil
sige at %20 er
mellemrum i langt de fleste ascii tabler. Jeg har altså også tit set
mellemrum kodet som %20,
så jeg har mine tvivl om det konsekvent skal kodes som '+'. Jeg vil mene at
du kan
kode dine special tegn med deres respektive hex værdier.

Mvh
Thomas





Niels (niLLer) (01-12-2000)
Kommentar
Fra : Niels (niLLer)


Dato : 01-12-00 18:04

Just as I expected, "Thomas Due" <noname@nowhere.net> came up with
this:
>Det er dog mit indtryk at for en almindelig ascii tabel vil de første 127
>karaktere altid være
>de samme (muligvis med undtagelse af asiatiske og arabiske tabler).

De første 128 ASCII tegn (0 ... 127) er altid de samme. Ellers er det
ikke ASCII!

>Det vil sige at %20 er
>mellemrum i langt de fleste ascii tabler. Jeg har altså også tit set
>mellemrum kodet som %20,
>så jeg har mine tvivl om det konsekvent skal kodes som '+'. Jeg vil mene at
>du kan
>kode dine special tegn med deres respektive hex værdier.

Jeg er ikke sikker, men jeg mener et %20 bliver brugt i selve
addressen og + bliver brugt i data der bliver sendt til et script.
F.eks.:

http://www.server.dk/fil%20med%20%mellemrum.php?par=tekst+med+mellemrum

Niels (aka. niLLer)
--
e-mail: nmartin at iname dot com ICQ UIN: 50187323
http://xoasis.com/~niller/ - niLLer's pages (My programs, in English)
http://whitehat.dk/g4s/ - The G4S Page (Personlig side, på dansk)
-- Behind the end of nowhere!

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste