Konvertera textsträng till länkadress

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Konvertera textsträng till länkadress

Inlägg av Johnny Rosenberg »

Håller på med ett skript som skapar html-filer åt mig. I dessa filer finns bland annat rader som ser ut ungefär så här:

Kod: Markera allt

<a href="http://address.to.somewhere/some folder/some file.type">Some text.</a>
Det uppenbara problemet nu är ju mellanslagen i adressen, som ska bytas ut mot %20, men det kan ju även förekomma andra tecken som måste bytas ut.

För tillfället har jag bara löst det på enklaste sätt och bytt ut alla mellanslag mot %20 med sed, men jag vill ha en säkrare lösning.

Har sökt runt en del men inte funnit något som fungerar. Någon nämnde att man kunde använda curl till detta, men jag har inte lyckats med det ännu och jag är inte helt säker på att det är tillämpligt i mitt fall heller.

Låt oss säga att jag har en variabel:

Kod: Markera allt

URL="http://address.to.somewhere/some folder/some file.type"
Vad jag vill göra är att konvertera den ungefär så här:

Kod: Markera allt

URL=SomeCommand --some-options "${URL}"
När denna rad körts ska följande rad ge följande svar:

Kod: Markera allt

$ echo "${URL}"
http://address.to.somewhere/some%20folder/some%20file.type
$
Letar i första hand efter något CLI-program som går att installera från de vanliga förråden, eller ännu hellre något som redan är installerat som standard (som jag då tydligen missat…).

Ett förslag jag hittat var följande:

Kod: Markera allt

function urlencode() {
     echo -n "$1" | perl -MURI::Escape -ne 'print uri_escape($_)';
}
Denna passade dock inte alls in i detta sammanhang, då den konverterade även ”/” i själva adressen, vilket inte var så lyckat.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Gunnar Hjalmarsson
Inlägg: 3030
Blev medlem: 08 aug 2010, 13:49
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Göteborg

Re: Konvertera textsträng till länkadress

Inlägg av Gunnar Hjalmarsson »

Johnny Rosenberg skrev:Ett förslag jag hittat var följande:

Kod: Markera allt

function urlencode() {
     echo -n "$1" | perl -MURI::Escape -ne 'print uri_escape($_)';
}
Denna passade dock inte alls in i detta sammanhang, då den konverterade även ”/” i själva adressen, vilket inte var så lyckat.
Varför inte? Har du testat och funnit att en länk med konverterade "/" inte fungerar?
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: Konvertera textsträng till länkadress

Inlägg av Johnny Rosenberg »

Ja. Det funkar i alla fall inte att klistra in den i webbläsarens adressfält.

Och med webbläsaren menar jag då Opera, men jag testade även med Firefox med samma resultat.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Gunnar Hjalmarsson
Inlägg: 3030
Blev medlem: 08 aug 2010, 13:49
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Göteborg

Re: Konvertera textsträng till länkadress

Inlägg av Gunnar Hjalmarsson »

Ja, du har nog rätt. Syftet med funktionen uri_escape() i Perl är något annat.

Vad du egentligen behöver beror väl på hur det där skriptet går tillväga för att skapa adresserna. Vad är det som får dig att tro att det finns andra tecken som behöver konverteras? Vilken slags säkerhetsaspekt försöker du adressera?
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: Konvertera textsträng till länkadress

Inlägg av Johnny Rosenberg »

Gunnar Hjalmarsson skrev:Ja, du har nog rätt. Syftet med funktionen uri_escape() i Perl är något annat.

Vad du egentligen behöver beror väl på hur det där skriptet går tillväga för att skapa adresserna.
Jag har filer lokalt som finns uppladdade på UbuntuOne. Skriptet startar jag genom att högerklicka på en fil och välja Nautilus Actions → flac-tags-to-html.sh (det vill säga mitt eget skript).
Skriptet skapar sedan en html-sida (kommer senare att gå över till XML/XSLT, tror jag) med en länk till filen på UbuntuOne. Sidan innehåller även information om filen som jag plockar från filens FLAC-taggar (det är alltid FLAC-filer, vilket också framgår av namnet på skriptet).
Så vad jag har nu är alltså en html-fil med information om en låt och en klickbar länk till låten ifråga. Nu kommer själva kruxet: Jag vill även ha en html-fil (senare även den XML/XSLT) med en lista på alla filer med länk till varje låts informationsfil. Den länken ser för närvarande ut exempelvis så här:

Kod: Markera allt

http://hem.bredband.net/johnnyguitar/04. Mr. Moto.html
Filnamnet tar skriptet ju från sitt enda argument och resten av adressen är ju alltid samma, så den finns i en variabel.
Som du ser finns ju mellanslag i filnamnet, och det gör ju att länken inte fungerar, vad jag förstått. Den tar väl slut vid första mellanslaget, om jag förstått det rätt.
Gunnar Hjalmarsson skrev: Vad är det som får dig att tro att det finns andra tecken som behöver konverteras?
Jag använder ofta andra skumma tecken i mina filnamn, alltifrån japanska och ryska tecken till n-dash, parenteser och allt vad det kan vara. Det tycker jag man ska kunna göra år 2014, när exempelvis åäö har fungerat i webb-adresser (men märkligt nog ännu inte i e-postadresser…) i åtminstone något decennium nu.
Gunnar Hjalmarsson skrev: Vilken slags säkerhetsaspekt försöker du adressera?
Ingen, tror jag. Jag vill bara att mina länkar ska fungera så att man kommer någonstans när man klickar på dem, gärna till rätt ställe också…
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Gunnar Hjalmarsson
Inlägg: 3030
Blev medlem: 08 aug 2010, 13:49
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Göteborg

Re: Konvertera textsträng till länkadress

Inlägg av Gunnar Hjalmarsson »

Nej, vare sig mellanslag eller andra blanktecken såsom tabbar funkar i webbadresser. Att några andra normala tecken inte skulle funka känner jag inte till. Förmodligen kommer du att klara dig rätt hyggligt med att bara byta ut mellanslagen.
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: Konvertera textsträng till länkadress

Inlägg av Johnny Rosenberg »

Gunnar Hjalmarsson skrev:Nej, vare sig mellanslag eller andra blanktecken såsom tabbar funkar i webbadresser. Att några andra normala tecken inte skulle funka känner jag inte till. Förmodligen kommer du att klara dig rätt hyggligt med att bara byta ut mellanslagen.
Ja, hittills har det fungerat, men samtidigt vill man ”göra rätt från början”, så att säga. Om inte annat, för att kunna använda mina små alster i större sammanhang…
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Skriv svar

Återgå till "Terminalforum"