Konvertera textsträng till länkadress
Postat: 10 mar 2014, 00:00
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:
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:
Vad jag vill göra är att konvertera den ungefär så här:
När denna rad körts ska följande rad ge följande svar:
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:
Denna passade dock inte alls in i detta sammanhang, då den konverterade även ”/” i själva adressen, vilket inte var så lyckat.
Kod: Markera allt
<a href="http://address.to.somewhere/some folder/some file.type">Some text.</a>
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"
Kod: Markera allt
URL=SomeCommand --some-options "${URL}"
Kod: Markera allt
$ echo "${URL}"
http://address.to.somewhere/some%20folder/some%20file.type
$
Ett förslag jag hittat var följande:
Kod: Markera allt
function urlencode() {
echo -n "$1" | perl -MURI::Escape -ne 'print uri_escape($_)';
}