|
|||||||||||||||||||||||||||
On Sun, 12 Dec 1999 sslug@sslug wrote:
> Jeg har brug for en smart måde hvorved jeg kan oversætte en vilkårlig
> streng til en streng som kun består af tegnene [A-Za-z0-9], meget
> gerne så den oversatte strengs læsbarhed bevares så godt som muligt og
> så strengen kan oversættes tilbage til startværdien igen. (Det er
> urler der skal oversættes til 'sikre' og tilnærmelsesvis pæne filnavne)
Det letteste er nok noget i stil med:
$url =~ s#([%/;])# sprintf("%%%02X", ord($1))#ge;
som erstatter alle de tegn du mener skal være forbudte (her %, / og ;)
med procenttegn og hexværdien (ligesom standard URL encoding). Der er nok
en funktion til at gøre det allerede et sted i Perl modulerne :)
ord('karakter') returner tegnets ASCII værdi og sprintf med %X formattet
printer hex (%% printer %)
Tilbage igen:
$url =~ s/%(..)/chr(hex($1))/ge;
.. matcher to karakter efter %, hex oversætter fra hex til ordinal værdi
og chr laver om fra et tal til en karakter.
s# varianten gør at man ikke behøver at sætte \ foran / som man skulle
hvis man skrev s/../../
--
==============================================================================
Erwin Andreasen Herlev, Denmark <sslug@sslug> UNIX System Programmer
<URL:http://www.andreasen.org> <*> (not speaking for) DDE
==============================================================================
|
||||||||||||||
|
||||||||||||||