URL decoding: Difference between revisions

(add section: Bash. link to UNIX Shell)
 
(18 intermediate revisions by 7 users not shown)
Line 10:
 
* &nbsp; The encoded string &nbsp; "<code><nowiki>google.com/search?q=%60Abdu%27l-Bah%C3%A1</nowiki></code>" &nbsp; should revert to the unencoded form &nbsp; "<code><nowiki>google.com/search?q=`Abdu'l-Bahá</nowiki></code>".
 
* &nbsp; The encoded string &nbsp; "<code><nowiki>%25%32%35</nowiki></code>" &nbsp; should revert to the unencoded form &nbsp; "<code><nowiki>%25</nowiki></code>" and '''not''' "<code><nowiki>%</nowiki></code>".
<br><br>
 
Line 260 ⟶ 262:
 
=={{header|AutoHotkey}}==
<syntaxhighlight lang="autohotkey">encURL := "http%3A%2F%2Ffoo%20bar%2F"
UriDecode(Uri) {
SetFormat, Integer, hex
LoopOffset := 0
Loop Parse, encURL
If A_LoopFieldVarLength := `%0
VarSetCapacity(Var, StrPut(Uri, "UTF-8"), 0)
reading := 2, read := ""
else ifLoop readingParse, Uri
{
If (A_Index < LoopOffset) {
read .= A_LoopField, --reading
if not reading Continue
out .= Chr("0x" . read)}
If (A_LoopField = Chr(37)) {
}
Number := "0x" . SubStr(Uri, A_Index + 1, 2)
else out .= A_LoopField
LoopOffset := A_Index + 3
MsgBox % out ; http://foo bar/
}
Else {
Number := Ord(A_LoopField)
}
NumPut(Number, Var, VarLength++, "UChar")
}
Return StrGet(&Var, VarLength, "UTF-8")
}
MsgBox % UriDecode("http%3A%2F%2Ffoo%20bar%2F")
MsgBox % UriDecode("google.com/search?q=%60Abdu%27l-Bah%C3%A1")
MsgBox % UriDecode("%25%32%35")
</syntaxhighlight>
 
Line 786 ⟶ 799:
 
=={{header|Java}}==
Java offers the ''URLDecoder'' and ''URLEncoder'' classes for this specific task.
 
<syntaxhighlight lang="java">import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
 
</syntaxhighlight>
public class Main
<syntaxhighlight lang="java">
{
URLDecoder.decode("http%3A%2F%2Ffoo%20bar%2F", StandardCharsets.UTF_8)
public static void main(String[] args) throws UnsupportedEncodingException
</syntaxhighlight>
{
Alternately, you could use a regular expression capture
String encoded = "http%3A%2F%2Ffoo%20bar%2F";
<syntaxhighlight lang="java">
String normal = URLDecoder.decode(encoded, "utf-8");
import java.util.regex.Matcher;
System.out.println(normal);
import java.util.regex.Pattern;
</syntaxhighlight>
<syntaxhighlight lang="java">
String decode(String string) {
Pattern pattern = Pattern.compile("%([A-Za-z\\d]{2})");
Matcher matcher = pattern.matcher(string);
StringBuilder decoded = new StringBuilder(string);
char character;
int start, end, offset = 0;
while (matcher.find()) {
character = (char) Integer.parseInt(matcher.group(1), 16);
/* offset the matched index since were adjusting the string */
start = matcher.start() - offset;
end = matcher.end() - offset;
decoded.replace(start, end, String.valueOf(character));
offset += 2;
}
return decoded.toString();
}</syntaxhighlight>
}
 
</syntaxhighlight>
{{out}}
<pre>
<pre>http://foo bar/</pre>
http://foo bar/
google.com/search?q=`Abdu'l-Bahá
</pre>
 
=={{header|JavaScript}}==
Line 909 ⟶ 941:
 
</syntaxhighlight>
 
 
=={{header|langur}}==
<syntaxhighlight lang="langur">
val finish = fn s:b2s(map(fn x:number(x, 16), rest(split("%", s))))
val decode = fn s:replace(s, re/(%[0-9A-Fa-f]{2})+/, finish)
 
writeln decode("http%3A%2F%2Ffoo%20bar%2F")
writeln decode("google.com/search?q=%60Abdu%27l-Bah%C3%A1")
</syntaxhighlight>
 
{{out}}
<pre>http://foo bar/
google.com/search?q=`Abdu'l-Bahá
</pre>
 
=={{header|Lasso}}==
Line 1,257 ⟶ 1,304:
mailto:"Irma User" <irma.user@mail.com>
</pre>
 
=={{header|PascalABC.NET}}==
<syntaxhighlight lang="delphi">
uses System;
 
function URLDecode(s: string) := Uri.UnescapeDataString(s);
begin
Println(URLDecode('http%3A%2F%2Ffoo%20bar%2F'));
Println(URLDecode('google.com/search?q=%60Abdu%27l-Bah%C3%A1'));
Println(URLDecode('%25%32%35'));
end.
</syntaxhighlight>
{{out}}
<pre>
http://foo bar/
google.com/search?q=`Abdu'l-Bahá
%25
</pre>
 
 
=={{header|Perl}}==
Line 1,640 ⟶ 1,707:
works like ''fromPercentEncoded'' and additionally decodes '+' with a space.
Both functions return byte sequences.
To decode Unicode characters it is necessary to convert them from UTF-8 with ''utf8ToStri''[https://seed7.sourceforge.net/libraries/unicode.htm#fromUtf8(in_string) fromUtf8] afterwards.
<syntaxhighlight lang="seed7">$ include "seed7_05.s7i";
include "encoding.s7i";
Line 1,840 ⟶ 1,907:
Decoded URL: http://foo barè/</pre>
 
=={{header|V (Vlang)}}==
<syntaxhighlight lang="v (vlang)">import net.urllib
fn main() {
for escaped in [
Line 1,859 ⟶ 1,926:
=={{header|Wren}}==
{{libheader|Wren-fmt}}
<syntaxhighlight lang="ecmascriptwren">import "./fmt" for Conv
 
var urlDecode = Fn.new { |enc|
1,007

edits