URLs encodieren und decodieren (Thema: PHP Beispiele)

Wie Strings in PHP für URLs encodiert und später wieder decodiert werden können

1. Einleitung

Innerhalb von URLs dürfen nicht alle vorhandenen Zeichen nach belieben verwendet werden. So muss etwa in Parametern das „&”-Zeichen codiert werden, da dieses (üblicherweise) zum Trennen der einzelnen Parameter voneinander verwendet wird. Die Faustregel ist, dass die meisten Zeichen, die nicht im Bereich a-z, A-Z und 0-9 liegen, codiert werden müssen. Genaueres lässt sich dem RFC unter http://www.ietf.org/rfc/rfc1738.txt entnehmen.

Die Encodierung erfolgt indem das Zeichen durch seinen Hexadezimalwert mit einem vorangestellten Prozent ersetzt wird. So würde aus „&” zum Beispiel „%26” werden. In PHP dienen die Funktionen urlencode($string) und rawurlencode($string) zum Codieren von Strings. Umgekehrt werden kann dies über urldecode($encodedString) und rawurldecode($decodedString).

2. Beispiel zu urlencode() und rawurlencode()

Im nachfolgenden Beispiel werden die Funktionen urlencode() und rawurlencode(), sowie ihre Umkehrungen urldecode() und rawurldecode() angewendet. Es wird der fiktive GET-Parameter „parameter1” mit Wert „Dies ist ein längerer Beispielstring” codiert und anschließend decodiert. Danach wird zusätzlich ein einzelnes Leerzeichen über die beiden Methoden codiert, um deutlicher den Unterschied zwischen den beiden Codierfunktionen zu zeigen: Während urlencode() Leerzeichen in Pluszeichen umwandelt, ersetzt rawurlencode() diese durch „%20”. Pluszeichen selbst können dennoch auch mit urlencode() verwendet werden, da beide Funktionen diese durch „%2B” ersetzen.

PHP-Code
<?php
	$_GET['parameter1'] = urlencode('Dies ist ein längerer Beispielstring');
	var_dump($_GET['parameter1']);
	var_dump(urldecode($_GET['parameter1']));
	
	$_GET['parameter2'] = rawurlencode('Dies ist ein längerer Beispielstring');
	var_dump($_GET['parameter2']);
	var_dump(rawurldecode($_GET['parameter2']));
	
	// urlencode() macht aus dem Leerzeichen ein +
	// rawurlencode() hingegen ein %20
	var_dump(urlencode(' '), urldecode(urlencode(' ')));
	var_dump(rawurlencode(' '), rawurldecode(rawurlencode(' ')));
	
	var_dump(urlencode('+'), urldecode(urlencode('+')));
	var_dump(rawurlencode('+'), rawurldecode(rawurlencode('+')));
?>

HTML-Code: php
string(41) "Dies+ist+ein+l%C3%A4ngerer+Beispielstring"
string(37) "Dies ist ein längerer Beispielstring"
string(49) "Dies%20ist%20ein%20l%C3%A4ngerer%20Beispielstring"
string(37) "Dies ist ein längerer Beispielstring"
string(1) "+"
string(1) " "
string(3) "%20"
string(1) " "
string(3) "%2B"
string(1) "+"
string(3) "%2B"
string(1) "+"


3. Codierfunktionen in JavaScript und PHP im Vergleich

Interessant ist das Zusammenspiel zwischen JavaScript und PHP bei der Encodierung und Decodierung, da die beiden Sprachen nicht die selben Funktionen verwenden. JavaScript bietet gleich drei Funktionen zum Codieren: escape(string), encodeURI(string) und encodeURIComponent(string). In der nachfolgenden Tabelle werden diese drei Funktionen auf alle ASCII-Zeichen zwischen 1 und 255 angewendet und sowohl mit urlencode() als auch mit rawurlencode() verglichen.

Legende:

  • Weiße Zeile: Das Zeichen wurde in keiner Funktion codiert.
  • Blaue Zeile: Das Zeichen wurde in allen Funktionen gleich codiert.
  • Rote Zeile: Es gab bei der Codierung des Zeichens Unterschiede zwischen den Funktionen.

Besonders ist hier auch wieder auf das Zeichen 32 hinzuweisen, welches das Leerzeichen ist.

ASCII-Nummer Zeichen PHP
urlencode()
PHP
rawurlencode()
JS
escape()
JS
encodeURI()
JS
encodeURIComponent()
0%00%00%00%00%00
1%01%01%01%01%01
2%02%02%02%02%02
3%03%03%03%03%03
4%04%04%04%04%04
5%05%05%05%05%05
6%06%06%06%06%06
7%07%07%07%07%07
8%08%08%08%08%08
9 %09%09%09%09%09
11 %0B%0B%0B%0B%0B
12 %0C%0C%0C%0C%0C
14%0E%0E%0E%0E%0E
15%0F%0F%0F%0F%0F
16%10%10%10%10%10
17%11%11%11%11%11
18%12%12%12%12%12
19%13%13%13%13%13
20%14%14%14%14%14
21%15%15%15%15%15
22%16%16%16%16%16
23%17%17%17%17%17
24%18%18%18%18%18
25%19%19%19%19%19
26%1A%1A%1A%1A%1A
27%1B%1B%1B%1B%1B
28%1C%1C%1C%1C%1C
29%1D%1D%1D%1D%1D
30%1E%1E%1E%1E%1E
31%1F%1F%1F%1F%1F
32 +%20%20%20%20
33!%21%21%21!!
34"%22%22%22%22%22
35#%23%23%23#%23
36$%24%24%24$%24
37%%25%25%25%25%25
38&%26%26%26&%26
39'%27%27%27''
40(%28%28%28((
41)%29%29%29))
42*%2A%2A***
43+%2B%2B++%2B
44,%2C%2C%2C,%2C
45------
46......
47/%2F%2F//%2F
48000000
49111111
50222222
51333333
52444444
53555555
54666666
55777777
56888888
57999999
58:%3A%3A%3A:%3A
59;%3B%3B%3B;%3B
60<%3C%3C%3C%3C%3C
61=%3D%3D%3D=%3D
62>%3E%3E%3E%3E%3E
63?%3F%3F%3F?%3F
64@%40%40@@%40
65AAAAAA
66BBBBBB
67CCCCCC
68DDDDDD
69EEEEEE
70FFFFFF
71GGGGGG
72HHHHHH
73IIIIII
74JJJJJJ
75KKKKKK
76LLLLLL
77MMMMMM
78NNNNNN
79OOOOOO
80PPPPPP
81QQQQQQ
82RRRRRR
83SSSSSS
84TTTTTT
85UUUUUU
86VVVVVV
87WWWWWW
88XXXXXX
89YYYYYY
90ZZZZZZ
91[%5B%5B%5B%5B%5B
92\%5C%5C%5C%5C%5C
93]%5D%5D%5D%5D%5D
94^%5E%5E%5E%5E%5E
95______
96`%60%60%60%60%60
97aaaaaa
98bbbbbb
99cccccc
100dddddd
101eeeeee
102ffffff
103gggggg
104hhhhhh
105iiiiii
106jjjjjj
107kkkkkk
108llllll
109mmmmmm
110nnnnnn
111oooooo
112pppppp
113qqqqqq
114rrrrrr
115ssssss
116tttttt
117uuuuuu
118vvvvvv
119wwwwww
120xxxxxx
121yyyyyy
122zzzzzz
123{%7B%7B%7B%7B%7B
124|%7C%7C%7C%7C%7C
125}%7D%7D%7D%7D%7D
126~%7E~%7E~~
127%7F%7F%7F%7F%7F
128%80%80%uFFFD%EF%BF%BD%EF%BF%BD
129%81%81%uFFFD%EF%BF%BD%EF%BF%BD
130%82%82%uFFFD%EF%BF%BD%EF%BF%BD
131%83%83%uFFFD%EF%BF%BD%EF%BF%BD
132%84%84%uFFFD%EF%BF%BD%EF%BF%BD
133%85%85%uFFFD%EF%BF%BD%EF%BF%BD
134%86%86%uFFFD%EF%BF%BD%EF%BF%BD
135%87%87%uFFFD%EF%BF%BD%EF%BF%BD
136%88%88%uFFFD%EF%BF%BD%EF%BF%BD
137%89%89%uFFFD%EF%BF%BD%EF%BF%BD
138%8A%8A%uFFFD%EF%BF%BD%EF%BF%BD
139%8B%8B%uFFFD%EF%BF%BD%EF%BF%BD
140%8C%8C%uFFFD%EF%BF%BD%EF%BF%BD
141%8D%8D%uFFFD%EF%BF%BD%EF%BF%BD
142%8E%8E%uFFFD%EF%BF%BD%EF%BF%BD
143%8F%8F%uFFFD%EF%BF%BD%EF%BF%BD
144%90%90%uFFFD%EF%BF%BD%EF%BF%BD
145%91%91%uFFFD%EF%BF%BD%EF%BF%BD
146%92%92%uFFFD%EF%BF%BD%EF%BF%BD
147%93%93%uFFFD%EF%BF%BD%EF%BF%BD
148%94%94%uFFFD%EF%BF%BD%EF%BF%BD
149%95%95%uFFFD%EF%BF%BD%EF%BF%BD
150%96%96%uFFFD%EF%BF%BD%EF%BF%BD
151%97%97%uFFFD%EF%BF%BD%EF%BF%BD
152%98%98%uFFFD%EF%BF%BD%EF%BF%BD
153%99%99%uFFFD%EF%BF%BD%EF%BF%BD
154%9A%9A%uFFFD%EF%BF%BD%EF%BF%BD
155%9B%9B%uFFFD%EF%BF%BD%EF%BF%BD
156%9C%9C%uFFFD%EF%BF%BD%EF%BF%BD
157%9D%9D%uFFFD%EF%BF%BD%EF%BF%BD
158%9E%9E%uFFFD%EF%BF%BD%EF%BF%BD
159%9F%9F%uFFFD%EF%BF%BD%EF%BF%BD
160 %A0%A0%uFFFD%EF%BF%BD%EF%BF%BD
161¡%A1%A1%uFFFD%EF%BF%BD%EF%BF%BD
162¢%A2%A2%uFFFD%EF%BF%BD%EF%BF%BD
163£%A3%A3%uFFFD%EF%BF%BD%EF%BF%BD
164¤%A4%A4%uFFFD%EF%BF%BD%EF%BF%BD
165¥%A5%A5%uFFFD%EF%BF%BD%EF%BF%BD
166¦%A6%A6%uFFFD%EF%BF%BD%EF%BF%BD
167§%A7%A7%uFFFD%EF%BF%BD%EF%BF%BD
168¨%A8%A8%uFFFD%EF%BF%BD%EF%BF%BD
169©%A9%A9%uFFFD%EF%BF%BD%EF%BF%BD
170ª%AA%AA%uFFFD%EF%BF%BD%EF%BF%BD
171«%AB%AB%uFFFD%EF%BF%BD%EF%BF%BD
172¬%AC%AC%uFFFD%EF%BF%BD%EF%BF%BD
173­%AD%AD%uFFFD%EF%BF%BD%EF%BF%BD
174®%AE%AE%uFFFD%EF%BF%BD%EF%BF%BD
175¯%AF%AF%uFFFD%EF%BF%BD%EF%BF%BD
176°%B0%B0%uFFFD%EF%BF%BD%EF%BF%BD
177±%B1%B1%uFFFD%EF%BF%BD%EF%BF%BD
178²%B2%B2%uFFFD%EF%BF%BD%EF%BF%BD
179³%B3%B3%uFFFD%EF%BF%BD%EF%BF%BD
180´%B4%B4%uFFFD%EF%BF%BD%EF%BF%BD
181µ%B5%B5%uFFFD%EF%BF%BD%EF%BF%BD
182%B6%B6%uFFFD%EF%BF%BD%EF%BF%BD
183·%B7%B7%uFFFD%EF%BF%BD%EF%BF%BD
184¸%B8%B8%uFFFD%EF%BF%BD%EF%BF%BD
185¹%B9%B9%uFFFD%EF%BF%BD%EF%BF%BD
186º%BA%BA%uFFFD%EF%BF%BD%EF%BF%BD
187»%BB%BB%uFFFD%EF%BF%BD%EF%BF%BD
188¼%BC%BC%uFFFD%EF%BF%BD%EF%BF%BD
189½%BD%BD%uFFFD%EF%BF%BD%EF%BF%BD
190¾%BE%BE%uFFFD%EF%BF%BD%EF%BF%BD
191¿%BF%BF%uFFFD%EF%BF%BD%EF%BF%BD
192À%C0%C0%uFFFD%EF%BF%BD%EF%BF%BD
193Á%C1%C1%uFFFD%EF%BF%BD%EF%BF%BD
194Â%C2%C2%uFFFD%EF%BF%BD%EF%BF%BD
195Ã%C3%C3%uFFFD%EF%BF%BD%EF%BF%BD
196Ä%C4%C4%uFFFD%EF%BF%BD%EF%BF%BD
197Å%C5%C5%uFFFD%EF%BF%BD%EF%BF%BD
198Æ%C6%C6%uFFFD%EF%BF%BD%EF%BF%BD
199Ç%C7%C7%uFFFD%EF%BF%BD%EF%BF%BD
200È%C8%C8%uFFFD%EF%BF%BD%EF%BF%BD
201É%C9%C9%uFFFD%EF%BF%BD%EF%BF%BD
202Ê%CA%CA%uFFFD%EF%BF%BD%EF%BF%BD
203Ë%CB%CB%uFFFD%EF%BF%BD%EF%BF%BD
204Ì%CC%CC%uFFFD%EF%BF%BD%EF%BF%BD
205Í%CD%CD%uFFFD%EF%BF%BD%EF%BF%BD
206Î%CE%CE%uFFFD%EF%BF%BD%EF%BF%BD
207Ï%CF%CF%uFFFD%EF%BF%BD%EF%BF%BD
208Ð%D0%D0%uFFFD%EF%BF%BD%EF%BF%BD
209Ñ%D1%D1%uFFFD%EF%BF%BD%EF%BF%BD
210Ò%D2%D2%uFFFD%EF%BF%BD%EF%BF%BD
211Ó%D3%D3%uFFFD%EF%BF%BD%EF%BF%BD
212Ô%D4%D4%uFFFD%EF%BF%BD%EF%BF%BD
213Õ%D5%D5%uFFFD%EF%BF%BD%EF%BF%BD
214Ö%D6%D6%uFFFD%EF%BF%BD%EF%BF%BD
215×%D7%D7%uFFFD%EF%BF%BD%EF%BF%BD
216Ø%D8%D8%uFFFD%EF%BF%BD%EF%BF%BD
217Ù%D9%D9%uFFFD%EF%BF%BD%EF%BF%BD
218Ú%DA%DA%uFFFD%EF%BF%BD%EF%BF%BD
219Û%DB%DB%uFFFD%EF%BF%BD%EF%BF%BD
220Ü%DC%DC%uFFFD%EF%BF%BD%EF%BF%BD
221Ý%DD%DD%uFFFD%EF%BF%BD%EF%BF%BD
222Þ%DE%DE%uFFFD%EF%BF%BD%EF%BF%BD
223ß%DF%DF%uFFFD%EF%BF%BD%EF%BF%BD
224à%E0%E0%uFFFD%EF%BF%BD%EF%BF%BD
225á%E1%E1%uFFFD%EF%BF%BD%EF%BF%BD
226â%E2%E2%uFFFD%EF%BF%BD%EF%BF%BD
227ã%E3%E3%uFFFD%EF%BF%BD%EF%BF%BD
228ä%E4%E4%uFFFD%EF%BF%BD%EF%BF%BD
229å%E5%E5%uFFFD%EF%BF%BD%EF%BF%BD
230æ%E6%E6%uFFFD%EF%BF%BD%EF%BF%BD
231ç%E7%E7%uFFFD%EF%BF%BD%EF%BF%BD
232è%E8%E8%uFFFD%EF%BF%BD%EF%BF%BD
233é%E9%E9%uFFFD%EF%BF%BD%EF%BF%BD
234ê%EA%EA%uFFFD%EF%BF%BD%EF%BF%BD
235ë%EB%EB%uFFFD%EF%BF%BD%EF%BF%BD
236ì%EC%EC%uFFFD%EF%BF%BD%EF%BF%BD
237í%ED%ED%uFFFD%EF%BF%BD%EF%BF%BD
238î%EE%EE%uFFFD%EF%BF%BD%EF%BF%BD
239ï%EF%EF%uFFFD%EF%BF%BD%EF%BF%BD
240ð%F0%F0%uFFFD%EF%BF%BD%EF%BF%BD
241ñ%F1%F1%uFFFD%EF%BF%BD%EF%BF%BD
242ò%F2%F2%uFFFD%EF%BF%BD%EF%BF%BD
243ó%F3%F3%uFFFD%EF%BF%BD%EF%BF%BD
244ô%F4%F4%uFFFD%EF%BF%BD%EF%BF%BD
245õ%F5%F5%uFFFD%EF%BF%BD%EF%BF%BD
246ö%F6%F6%uFFFD%EF%BF%BD%EF%BF%BD
247÷%F7%F7%uFFFD%EF%BF%BD%EF%BF%BD
248ø%F8%F8%uFFFD%EF%BF%BD%EF%BF%BD
249ù%F9%F9%uFFFD%EF%BF%BD%EF%BF%BD
250ú%FA%FA%uFFFD%EF%BF%BD%EF%BF%BD
251û%FB%FB%uFFFD%EF%BF%BD%EF%BF%BD
252ü%FC%FC%uFFFD%EF%BF%BD%EF%BF%BD
253ý%FD%FD%uFFFD%EF%BF%BD%EF%BF%BD
254þ%FE%FE%uFFFD%EF%BF%BD%EF%BF%BD
255ÿ%FF%FF%uFFFD%EF%BF%BD%EF%BF%BD

Die vorherige Tabelle wurde mit dem folgendem Skript erzeugt. Dieses iteriert per PHP über alle 255 Zeichen und führt jeweils die PHP-Codierung (urlencode() und rawurlencode()) durch. Anschließend wird eine JavaScript-Funktion aufgerufen, an welche die in PHP codierten Zeichen übergeben werden. Die JavaScript-Funktion führt wiederum die drei möglichen JavaScript-Codierungen durch und fügt eine neue Zeile zur Tabelle mit allen Codierungen und einer entsprechenden farblichen Markierung hinzu.

PHP-Code
<table id="php-js-encoded-chars">
	<thead>
		<tr>
			<th>ASCII-Nummer</th>
			<th>Zeichen</th>
			<th>PHP<br />urlencode()</th>
			<th>PHP<br />rawurlencode()</th>
			<th>JS<br />escape()</th>
			<th>JS<br />encodeURI()</th>
			<th>JS<br />encodeURIComponent()</th>
		</tr>
	</thead>
	<tbody id="php-js-encoded-chars-body">
	</tbody>
</table>
<script type="text/javascript">
	var php_examples_encoding = {
		addRow : function(x, chrOutput, chr, _urlencode, _rawurlencode, _escape, _encodeURI, _encodeURIComponent) {
			var isEscaped = (chr != _urlencode || chr != _rawurlencode || chr != _escape || chr != _encodeURI || chr != _encodeURIComponent);
			var isUnequallyEscaped = ( 
										   (_urlencode != _rawurlencode || _urlencode != _escape || _urlencode != _encodeURI || _urlencode != _encodeURIComponent)
										|| (_rawurlencode != _escape || _rawurlencode != _encodeURI || _rawurlencode != _encodeURIComponent)
										|| (_escape != _encodeURI || _escape != _encodeURIComponent)
										|| (_encodeURI != _encodeURIComponent)
									);
			var row = document.createElement('tr');
			row.className = (isEscaped ? 'escaped' : 'unescaped');
			row.className += (isUnequallyEscaped ? ' unequal' : ' equal');
			row.innerHTML =   '<td>' + x + '</td>'
							+ '<td>' + chrOutput + '</td>'
							+ '<td>' + _urlencode + '</td>'
							+ '<td>' + _rawurlencode + '</td>'
							+ '<td>' + _escape + '</td>'
							+ '<td>' + _encodeURI + '</td>'
							+ '<td>' + _encodeURIComponent + '</td>';
			document.getElementById('php-js-encoded-chars-body').appendChild(row);
		}
	}
	
<?php
	for ($x=0; $x<256; ++$x) {
		// 10 und 13 sind Zeilenumbrueche, welche JS-Fehler erzeugen
		if ($x !== 10 && $x !== 13) {
			$chr = chr($x);
			$urlencode = urlencode($chr);
			$rawurlencode = rawurlencode($chr);
			
			$chrOutputAddSl = addslashes(htmlentities($chr, ENT_QUOTES));
			$chrAddSl = addslashes($chr);
			$urlencodeAddSl = addslashes($urlencode);
			$rawurlencodeAddSl = addslashes($rawurlencode);
			
			echo "php_examples_encoding.addRow($x, '$chrOutputAddSl', '$chrAddSl', '$urlencodeAddSl', '$rawurlencodeAddSl', escape('$chrAddSl'), encodeURI('$chrAddSl'), encodeURIComponent('$chrAddSl'));\n";
		}
	}
?>
</script>

4. Decodieren im Zusammenspiel mit JavaScript

Nachdem bereits die Codierung im Vergleich gezeigt wurde, wird nun das Zusammenspiel zwischen JavaScript und PHP beleuchtet. Dabei wird hier analysiert, wie Zeichen am besten in PHP decodiert werden, die zuvor in JavaScript codiert wurden. Die Ergebnisse in der Zusammenfassung lauten: In JavaScript immer encodeURIComponent() verwenden und in PHP am besten rawurldecode(). Dann werden alle Zeichen auf Seiten von PHP korrekt empfangen.

4.1. Bei Verwendung von escape() in JavaScript

Die erste Tabelle beleuchtet die Decodierung von Zeichen, die in JavaScript per escape() codiert wurden. Grün markiert sind korrekt decodierte Zeichen und rot entsprechend falsch decodierte. Wie zu sehen ist, versagen sowohl urldecode() als auch rawurldecode() bei etlichen Zeichen. Von escape() ist daher abzuraten.

ASCII-Nummer Zeichen JS
escape()
PHP
urldecode()
PHP
rawurldecode()
0%00
1%01
2%02
3%03
4%04
5%05
6%06
7%07
8%08
9 %09
11 %0B
12 %0C
14%0E
15%0F
16%10
17%11
18%12
19%13
20%14
21%15
22%16
23%17
24%18
25%19
26%1A
27%1B
28%1C
29%1D
30%1E
31%1F
32 %20
33!%21!!
34"%22""
35#%23##
36$%24$$
37%%25%%
38&%26&&
39'%27''
40(%28((
41)%29))
42****
43++ +
44,%2C,,
45----
46....
47////
480000
491111
502222
513333
524444
535555
546666
557777
568888
579999
58:%3A::
59;%3B;;
60<%3C<<
61=%3D==
62>%3E>>
63?%3F??
64@@@@
65AAAA
66BBBB
67CCCC
68DDDD
69EEEE
70FFFF
71GGGG
72HHHH
73IIII
74JJJJ
75KKKK
76LLLL
77MMMM
78NNNN
79OOOO
80PPPP
81QQQQ
82RRRR
83SSSS
84TTTT
85UUUU
86VVVV
87WWWW
88XXXX
89YYYY
90ZZZZ
91[%5B[[
92\%5C\\
93]%5D]]
94^%5E^^
95____
96`%60``
97aaaa
98bbbb
99cccc
100dddd
101eeee
102ffff
103gggg
104hhhh
105iiii
106jjjj
107kkkk
108llll
109mmmm
110nnnn
111oooo
112pppp
113qqqq
114rrrr
115ssss
116tttt
117uuuu
118vvvv
119wwww
120xxxx
121yyyy
122zzzz
123{%7B{{
124|%7C||
125}%7D}}
126~%7E~~
127%7F
128?%uFFFD%uFFFD%uFFFD
129?%uFFFD%uFFFD%uFFFD
130?%uFFFD%uFFFD%uFFFD
131?%uFFFD%uFFFD%uFFFD
132?%uFFFD%uFFFD%uFFFD
133?%uFFFD%uFFFD%uFFFD
134?%uFFFD%uFFFD%uFFFD
135?%uFFFD%uFFFD%uFFFD
136?%uFFFD%uFFFD%uFFFD
137?%uFFFD%uFFFD%uFFFD
138?%uFFFD%uFFFD%uFFFD
139?%uFFFD%uFFFD%uFFFD
140?%uFFFD%uFFFD%uFFFD
141?%uFFFD%uFFFD%uFFFD
142?%uFFFD%uFFFD%uFFFD
143?%uFFFD%uFFFD%uFFFD
144?%uFFFD%uFFFD%uFFFD
145?%uFFFD%uFFFD%uFFFD
146?%uFFFD%uFFFD%uFFFD
147?%uFFFD%uFFFD%uFFFD
148?%uFFFD%uFFFD%uFFFD
149?%uFFFD%uFFFD%uFFFD
150?%uFFFD%uFFFD%uFFFD
151?%uFFFD%uFFFD%uFFFD
152?%uFFFD%uFFFD%uFFFD
153?%uFFFD%uFFFD%uFFFD
154?%uFFFD%uFFFD%uFFFD
155?%uFFFD%uFFFD%uFFFD
156?%uFFFD%uFFFD%uFFFD
157?%uFFFD%uFFFD%uFFFD
158?%uFFFD%uFFFD%uFFFD
159?%uFFFD%uFFFD%uFFFD
160 %uFFFD%uFFFD%uFFFD
161¡%uFFFD%uFFFD%uFFFD
162¢%uFFFD%uFFFD%uFFFD
163£%uFFFD%uFFFD%uFFFD
164¤%uFFFD%uFFFD%uFFFD
165¥%uFFFD%uFFFD%uFFFD
166¦%uFFFD%uFFFD%uFFFD
167§%uFFFD%uFFFD%uFFFD
168¨%uFFFD%uFFFD%uFFFD
169©%uFFFD%uFFFD%uFFFD
170ª%uFFFD%uFFFD%uFFFD
171«%uFFFD%uFFFD%uFFFD
172¬%uFFFD%uFFFD%uFFFD
173­%uFFFD%uFFFD%uFFFD
174®%uFFFD%uFFFD%uFFFD
175¯%uFFFD%uFFFD%uFFFD
176°%uFFFD%uFFFD%uFFFD
177±%uFFFD%uFFFD%uFFFD
178²%uFFFD%uFFFD%uFFFD
179³%uFFFD%uFFFD%uFFFD
180´%uFFFD%uFFFD%uFFFD
181µ%uFFFD%uFFFD%uFFFD
182%uFFFD%uFFFD%uFFFD
183·%uFFFD%uFFFD%uFFFD
184¸%uFFFD%uFFFD%uFFFD
185¹%uFFFD%uFFFD%uFFFD
186º%uFFFD%uFFFD%uFFFD
187»%uFFFD%uFFFD%uFFFD
188¼%uFFFD%uFFFD%uFFFD
189½%uFFFD%uFFFD%uFFFD
190¾%uFFFD%uFFFD%uFFFD
191¿%uFFFD%uFFFD%uFFFD
192À%uFFFD%uFFFD%uFFFD
193Á%uFFFD%uFFFD%uFFFD
194Â%uFFFD%uFFFD%uFFFD
195Ã%uFFFD%uFFFD%uFFFD
196Ä%uFFFD%uFFFD%uFFFD
197Å%uFFFD%uFFFD%uFFFD
198Æ%uFFFD%uFFFD%uFFFD
199Ç%uFFFD%uFFFD%uFFFD
200È%uFFFD%uFFFD%uFFFD
201É%uFFFD%uFFFD%uFFFD
202Ê%uFFFD%uFFFD%uFFFD
203Ë%uFFFD%uFFFD%uFFFD
204Ì%uFFFD%uFFFD%uFFFD
205Í%uFFFD%uFFFD%uFFFD
206Î%uFFFD%uFFFD%uFFFD
207Ï%uFFFD%uFFFD%uFFFD
208Ð%uFFFD%uFFFD%uFFFD
209Ñ%uFFFD%uFFFD%uFFFD
210Ò%uFFFD%uFFFD%uFFFD
211Ó%uFFFD%uFFFD%uFFFD
212Ô%uFFFD%uFFFD%uFFFD
213Õ%uFFFD%uFFFD%uFFFD
214Ö%uFFFD%uFFFD%uFFFD
215×%uFFFD%uFFFD%uFFFD
216Ø%uFFFD%uFFFD%uFFFD
217Ù%uFFFD%uFFFD%uFFFD
218Ú%uFFFD%uFFFD%uFFFD
219Û%uFFFD%uFFFD%uFFFD
220Ü%uFFFD%uFFFD%uFFFD
221Ý%uFFFD%uFFFD%uFFFD
222Þ%uFFFD%uFFFD%uFFFD
223ß%uFFFD%uFFFD%uFFFD
224à%uFFFD%uFFFD%uFFFD
225á%uFFFD%uFFFD%uFFFD
226â%uFFFD%uFFFD%uFFFD
227ã%uFFFD%uFFFD%uFFFD
228ä%uFFFD%uFFFD%uFFFD
229å%uFFFD%uFFFD%uFFFD
230æ%uFFFD%uFFFD%uFFFD
231ç%uFFFD%uFFFD%uFFFD
232è%uFFFD%uFFFD%uFFFD
233é%uFFFD%uFFFD%uFFFD
234ê%uFFFD%uFFFD%uFFFD
235ë%uFFFD%uFFFD%uFFFD
236ì%uFFFD%uFFFD%uFFFD
237í%uFFFD%uFFFD%uFFFD
238î%uFFFD%uFFFD%uFFFD
239ï%uFFFD%uFFFD%uFFFD
240ð%uFFFD%uFFFD%uFFFD
241ñ%uFFFD%uFFFD%uFFFD
242ò%uFFFD%uFFFD%uFFFD
243ó%uFFFD%uFFFD%uFFFD
244ô%uFFFD%uFFFD%uFFFD
245õ%uFFFD%uFFFD%uFFFD
246ö%uFFFD%uFFFD%uFFFD
247÷%uFFFD%uFFFD%uFFFD
248ø%uFFFD%uFFFD%uFFFD
249ù%uFFFD%uFFFD%uFFFD
250ú%uFFFD%uFFFD%uFFFD
251û%uFFFD%uFFFD%uFFFD
252ü%uFFFD%uFFFD%uFFFD
253ý%uFFFD%uFFFD%uFFFD
254þ%uFFFD%uFFFD%uFFFD
255ÿ%uFFFD%uFFFD%uFFFD

4.2. Bei Verwendung von encodeURI() in JavaScript

In dieser Tabelle ist encodeURI() dargestellt im Zusammenspiel mit urldecode() und rawurldecode() dargestellt. Die Verarbeitung funktioniert hier bereits deutlich besser, urldecode() scheitert aber noch bei einem Zeichen. Wer encodeURI() verwenden will, sollte daher auf rawurldecode() zurückgreifen.

Anmerkung: Einige der decodierten Zeichen sind beim Kopieren offenbar „kaputt” gegangen und sehen daher anders aus als die noch nicht codierten Varianten. Es sollte in diesen Fällen nur die farbliche Kennzeichnung des Tabellenfeldes beachtet werden, welche korrekt ist.

ASCII-Nummer Zeichen JS
encodeURI()
PHP
urldecode()
PHP
rawurldecode()
0%00
1%01
2%02
3%03
4%04
5%05
6%06
7%07
8%08
9 %09
11 %0B
12 %0C
14%0E
15%0F
16%10
17%11
18%12
19%13
20%14
21%15
22%16
23%17
24%18
25%19
26%1A
27%1B
28%1C
29%1D
30%1E
31%1F
32 %20
33!!!!
34"%22""
35####
36$$$$
37%%25%%
38&&&&
39''''
40((((
41))))
42****
43++ +
44,,,,
45----
46....
47////
480000
491111
502222
513333
524444
535555
546666
557777
568888
579999
58::::
59;;;;
60<%3C<<
61====
62>%3E>>
63????
64@@@@
65AAAA
66BBBB
67CCCC
68DDDD
69EEEE
70FFFF
71GGGG
72HHHH
73IIII
74JJJJ
75KKKK
76LLLL
77MMMM
78NNNN
79OOOO
80PPPP
81QQQQ
82RRRR
83SSSS
84TTTT
85UUUU
86VVVV
87WWWW
88XXXX
89YYYY
90ZZZZ
91[%5B[[
92\%5C\\
93]%5D]]
94^%5E^^
95____
96`%60``
97aaaa
98bbbb
99cccc
100dddd
101eeee
102ffff
103gggg
104hhhh
105iiii
106jjjj
107kkkk
108llll
109mmmm
110nnnn
111oooo
112pppp
113qqqq
114rrrr
115ssss
116tttt
117uuuu
118vvvv
119wwww
120xxxx
121yyyy
122zzzz
123{%7B{{
124|%7C||
125}%7D}}
126~~~~
127%7F
128?%EF%BF%BD??
129?%EF%BF%BD??
130?%EF%BF%BD??
131?%EF%BF%BD??
132?%EF%BF%BD??
133?%EF%BF%BD??
134?%EF%BF%BD??
135?%EF%BF%BD??
136?%EF%BF%BD??
137?%EF%BF%BD??
138?%EF%BF%BD??
139?%EF%BF%BD??
140?%EF%BF%BD??
141?%EF%BF%BD??
142?%EF%BF%BD??
143?%EF%BF%BD??
144?%EF%BF%BD??
145?%EF%BF%BD??
146?%EF%BF%BD??
147?%EF%BF%BD??
148?%EF%BF%BD??
149?%EF%BF%BD??
150?%EF%BF%BD??
151?%EF%BF%BD??
152?%EF%BF%BD??
153?%EF%BF%BD??
154?%EF%BF%BD??
155?%EF%BF%BD??
156?%EF%BF%BD??
157?%EF%BF%BD??
158?%EF%BF%BD??
159?%EF%BF%BD??
160 %EF%BF%BD??
161¡%EF%BF%BD??
162¢%EF%BF%BD??
163£%EF%BF%BD??
164¤%EF%BF%BD??
165¥%EF%BF%BD??
166¦%EF%BF%BD??
167§%EF%BF%BD??
168¨%EF%BF%BD??
169©%EF%BF%BD??
170ª%EF%BF%BD??
171«%EF%BF%BD??
172¬%EF%BF%BD??
173­%EF%BF%BD??
174®%EF%BF%BD??
175¯%EF%BF%BD??
176°%EF%BF%BD??
177±%EF%BF%BD??
178²%EF%BF%BD??
179³%EF%BF%BD??
180´%EF%BF%BD??
181µ%EF%BF%BD??
182%EF%BF%BD??
183·%EF%BF%BD??
184¸%EF%BF%BD??
185¹%EF%BF%BD??
186º%EF%BF%BD??
187»%EF%BF%BD??
188¼%EF%BF%BD??
189½%EF%BF%BD??
190¾%EF%BF%BD??
191¿%EF%BF%BD??
192À%EF%BF%BD??
193Á%EF%BF%BD??
194Â%EF%BF%BD??
195Ã%EF%BF%BD??
196Ä%EF%BF%BD??
197Å%EF%BF%BD??
198Æ%EF%BF%BD??
199Ç%EF%BF%BD??
200È%EF%BF%BD??
201É%EF%BF%BD??
202Ê%EF%BF%BD??
203Ë%EF%BF%BD??
204Ì%EF%BF%BD??
205Í%EF%BF%BD??
206Î%EF%BF%BD??
207Ï%EF%BF%BD??
208Ð%EF%BF%BD??
209Ñ%EF%BF%BD??
210Ò%EF%BF%BD??
211Ó%EF%BF%BD??
212Ô%EF%BF%BD??
213Õ%EF%BF%BD??
214Ö%EF%BF%BD??
215×%EF%BF%BD??
216Ø%EF%BF%BD??
217Ù%EF%BF%BD??
218Ú%EF%BF%BD??
219Û%EF%BF%BD??
220Ü%EF%BF%BD??
221Ý%EF%BF%BD??
222Þ%EF%BF%BD??
223ß%EF%BF%BD??
224à%EF%BF%BD??
225á%EF%BF%BD??
226â%EF%BF%BD??
227ã%EF%BF%BD??
228ä%EF%BF%BD??
229å%EF%BF%BD??
230æ%EF%BF%BD??
231ç%EF%BF%BD??
232è%EF%BF%BD??
233é%EF%BF%BD??
234ê%EF%BF%BD??
235ë%EF%BF%BD??
236ì%EF%BF%BD??
237í%EF%BF%BD??
238î%EF%BF%BD??
239ï%EF%BF%BD??
240ð%EF%BF%BD??
241ñ%EF%BF%BD??
242ò%EF%BF%BD??
243ó%EF%BF%BD??
244ô%EF%BF%BD??
245õ%EF%BF%BD??
246ö%EF%BF%BD??
247÷%EF%BF%BD??
248ø%EF%BF%BD??
249ù%EF%BF%BD??
250ú%EF%BF%BD??
251û%EF%BF%BD??
252ü%EF%BF%BD??
253ý%EF%BF%BD??
254þ%EF%BF%BD??
255ÿ%EF%BF%BD??

5. Bei Verwendung von encodeURIComponent() in JavaScript

In der nächsten Tabelle sind die Ergebnisse der Verarbeitung von encodeURIComponent() zu sehen. Diesmal werden alle Zeichen korrekt decodiert, die Funktion eignet sich also am besten für die PHP-Funktionen zum Decodieren.

Anmerkung: Einige der decodierten Zeichen sind beim Kopieren offenbar „kaputt” gegangen und sehen daher anders aus als die noch nicht codierten Varianten. Es sollte in diesen Fällen nur die farbliche Kennzeichnung des Tabellenfeldes beachtet werden, welche korrekt ist.

ASCII-Nummer Zeichen JS
encodeURIComponent()
PHP
urldecode()
PHP
rawurldecode()
0%00
1%01
2%02
3%03
4%04
5%05
6%06
7%07
8%08
9 %09
11 %0B
12 %0C
14%0E
15%0F
16%10
17%11
18%12
19%13
20%14
21%15
22%16
23%17
24%18
25%19
26%1A
27%1B
28%1C
29%1D
30%1E
31%1F
32 %20
33!!!!
34"%22""
35#%23##
36$%24$$
37%%25%%
38&%26&&
39''''
40((((
41))))
42****
43+%2B++
44,%2C,,
45----
46....
47/%2F//
480000
491111
502222
513333
524444
535555
546666
557777
568888
579999
58:%3A::
59;%3B;;
60<%3C<<
61=%3D==
62>%3E>>
63?%3F??
64@%40@@
65AAAA
66BBBB
67CCCC
68DDDD
69EEEE
70FFFF
71GGGG
72HHHH
73IIII
74JJJJ
75KKKK
76LLLL
77MMMM
78NNNN
79OOOO
80PPPP
81QQQQ
82RRRR
83SSSS
84TTTT
85UUUU
86VVVV
87WWWW
88XXXX
89YYYY
90ZZZZ
91[%5B[[
92\%5C\\
93]%5D]]
94^%5E^^
95____
96`%60``
97aaaa
98bbbb
99cccc
100dddd
101eeee
102ffff
103gggg
104hhhh
105iiii
106jjjj
107kkkk
108llll
109mmmm
110nnnn
111oooo
112pppp
113qqqq
114rrrr
115ssss
116tttt
117uuuu
118vvvv
119wwww
120xxxx
121yyyy
122zzzz
123{%7B{{
124|%7C||
125}%7D}}
126~~~~
127%7F
128?%EF%BF%BD??
129?%EF%BF%BD??
130?%EF%BF%BD??
131?%EF%BF%BD??
132?%EF%BF%BD??
133?%EF%BF%BD??
134?%EF%BF%BD??
135?%EF%BF%BD??
136?%EF%BF%BD??
137?%EF%BF%BD??
138?%EF%BF%BD??
139?%EF%BF%BD??
140?%EF%BF%BD??
141?%EF%BF%BD??
142?%EF%BF%BD??
143?%EF%BF%BD??
144?%EF%BF%BD??
145?%EF%BF%BD??
146?%EF%BF%BD??
147?%EF%BF%BD??
148?%EF%BF%BD??
149?%EF%BF%BD??
150?%EF%BF%BD??
151?%EF%BF%BD??
152?%EF%BF%BD??
153?%EF%BF%BD??
154?%EF%BF%BD??
155?%EF%BF%BD??
156?%EF%BF%BD??
157?%EF%BF%BD??
158?%EF%BF%BD??
159?%EF%BF%BD??
160 %EF%BF%BD??
161¡%EF%BF%BD??
162¢%EF%BF%BD??
163£%EF%BF%BD??
164¤%EF%BF%BD??
165¥%EF%BF%BD??
166¦%EF%BF%BD??
167§%EF%BF%BD??
168¨%EF%BF%BD??
169©%EF%BF%BD??
170ª%EF%BF%BD??
171«%EF%BF%BD??
172¬%EF%BF%BD??
173­%EF%BF%BD??
174®%EF%BF%BD??
175¯%EF%BF%BD??
176°%EF%BF%BD??
177±%EF%BF%BD??
178²%EF%BF%BD??
179³%EF%BF%BD??
180´%EF%BF%BD??
181µ%EF%BF%BD??
182%EF%BF%BD??
183·%EF%BF%BD??
184¸%EF%BF%BD??
185¹%EF%BF%BD??
186º%EF%BF%BD??
187»%EF%BF%BD??
188¼%EF%BF%BD??
189½%EF%BF%BD??
190¾%EF%BF%BD??
191¿%EF%BF%BD??
192À%EF%BF%BD??
193Á%EF%BF%BD??
194Â%EF%BF%BD??
195Ã%EF%BF%BD??
196Ä%EF%BF%BD??
197Å%EF%BF%BD??
198Æ%EF%BF%BD??
199Ç%EF%BF%BD??
200È%EF%BF%BD??
201É%EF%BF%BD??
202Ê%EF%BF%BD??
203Ë%EF%BF%BD??
204Ì%EF%BF%BD??
205Í%EF%BF%BD??
206Î%EF%BF%BD??
207Ï%EF%BF%BD??
208Ð%EF%BF%BD??
209Ñ%EF%BF%BD??
210Ò%EF%BF%BD??
211Ó%EF%BF%BD??
212Ô%EF%BF%BD??
213Õ%EF%BF%BD??
214Ö%EF%BF%BD??
215×%EF%BF%BD??
216Ø%EF%BF%BD??
217Ù%EF%BF%BD??
218Ú%EF%BF%BD??
219Û%EF%BF%BD??
220Ü%EF%BF%BD??
221Ý%EF%BF%BD??
222Þ%EF%BF%BD??
223ß%EF%BF%BD??
224à%EF%BF%BD??
225á%EF%BF%BD??
226â%EF%BF%BD??
227ã%EF%BF%BD??
228ä%EF%BF%BD??
229å%EF%BF%BD??
230æ%EF%BF%BD??
231ç%EF%BF%BD??
232è%EF%BF%BD??
233é%EF%BF%BD??
234ê%EF%BF%BD??
235ë%EF%BF%BD??
236ì%EF%BF%BD??
237í%EF%BF%BD??
238î%EF%BF%BD??
239ï%EF%BF%BD??
240ð%EF%BF%BD??
241ñ%EF%BF%BD??
242ò%EF%BF%BD??
243ó%EF%BF%BD??
244ô%EF%BF%BD??
245õ%EF%BF%BD??
246ö%EF%BF%BD??
247÷%EF%BF%BD??
248ø%EF%BF%BD??
249ù%EF%BF%BD??
250ú%EF%BF%BD??
251û%EF%BF%BD??
252ü%EF%BF%BD??
253ý%EF%BF%BD??
254þ%EF%BF%BD??
255ÿ%EF%BF%BD??

5.1. Skript zum Erstellen der Decodierungstabellen

Nachfolgend wird das Skript gezeigt, welches zum Erzeugen der drei Tabellen mit den Tests von escape(), encodeURI() und encodeURIComponent() verwendet wurde. Die Tabellen zu erzeugen ist nicht trivial, da letztlich von JavaScript aus PHP-Code aufgerufen werden muss. Zudem muss das in JavaScript codierte Zeichen unverfälscht an PHP übergeben werden. Hier wird zum Aufruf von PHP aus JavaScript AJAX über das jQuery-Framework verwendet. Um zu verhindern, dass jQuery seine eigene Codierung durchführt und dadurch das Ergebnis verfälscht, wird die encodierte Version des Zeichen in seine Einzelteile zerlegt (z. B. wird aus %20 ein % und eine 2 und eine 0). Zu den Einzelteilen wird jeweils der ASCII-Wert bestimmt und diese Zahlen — mit Bindestrichen getrennt — als ein String an urldecode.php und rawurldecode.php übergeben. Diese kehren das ganze wieder um, sodass sie urldecode() bzw. rawurldecode() auf die codierte Version des Zeichens anwenden und das Ergebnis zurückgeben können. Der restliche JavaScript-Code kümmert sich dann darum, zu bestimmen, ob die Decodierung korrekt war und die Tabellenzeilen in der entsprechenden Farbe (rot oder grün) hinzuzufügen.

PHP-Datei zum Decodieren von empfangenen Zeichen über urldecode() (muss aufrufbar sein über http://www.phptest.local/urldecode.php):

PHP-Code: urldecode.php
<?php
	$ascii = $_GET['ascii'];
	$ascii = explode('-', $ascii);
	foreach ($ascii as $key=>$val) {
		$ascii[$key] = chr($val);
	}
	$ascii = implode('', $ascii);
	echo(urldecode($ascii));
?>

PHP-Datei zum Decodieren von empfangenen Zeichen über rawurldecode() (muss aufrufbar sein über http://www.phptest.local/rawurldecode.php):

PHP-Code: rawurldecode.php
<?php
	$ascii = $_GET['ascii'];
	$ascii = explode('-', $ascii);
	foreach ($ascii as $key=>$val) {
		$ascii[$key] = chr($val);
	}
	$ascii = implode('', $ascii);
	echo(rawurldecode($ascii));
?>

Eigentlicher Code, der die Tabelle erzeugt:

PHP-Code
<script type="text/javascript" src="jquery-1.7.2.js"></script>

<table class="php-js-decode-encoding">
	<thead>
		<tr>
			<th>ASCII-Nummer</th>
			<th>Zeichen</th>
			<th>JS<br />escape()</th>
			<th>PHP<br />urldecode()</th>
			<th>PHP<br />rawurldecode()</th>
		</tr>
	</thead>
	<tbody id="php-js-decode-encoding-body-1">
	</tbody>
</table>

<table class="php-js-decode-encoding">
	<thead>
		<tr>
			<th>ASCII-Nummer</th>
			<th>Zeichen</th>
			<th>JS<br />encodeURI()</th>
			<th>PHP<br />urldecode()</th>
			<th>PHP<br />rawurldecode()</th>
		</tr>
	</thead>
	<tbody id="php-js-decode-encoding-body-2">
	</tbody>
</table>

<table class="php-js-decode-encoding">
	<thead>
		<tr>
			<th>ASCII-Nummer</th>
			<th>Zeichen</th>
			<th>JS<br />encodeURIComponent()</th>
			<th>PHP<br />urldecode()</th>
			<th>PHP<br />rawurldecode()</th>
		</tr>
	</thead>
	<tbody id="php-js-decode-encoding-body-3">
	</tbody>
</table>

<script type="text/javascript">
	var php_examples_decode_encoding = {
		addRow : function(tableBodyId, x, chrOutput, chr, _escape) {
			var row = document.createElement('tr');
			var tdUrldecode = document.createElement('td');
			var tdRawurldecode = document.createElement('td');
			
			row.innerHTML =   '<td>' + x + '</td>'
							+ '<td>' + chrOutput + '</td>'
							+ '<td>' + _escape + '</td>';
			row.appendChild(tdUrldecode);
			row.appendChild(tdRawurldecode);
			this.chrToUrldecoded(chr, _escape, tdUrldecode);
			this.chrToRawurldecoded(chr, _escape, tdRawurldecode);
			document.getElementById(tableBodyId).appendChild(row);
		},
		
		chrToUrldecoded : function(chr, encodedValue, logToObj) {
			var ascii = '';
			for (var x=0; x<encodedValue.length; x++) {
				ascii += (ascii.length>0 ? '-'+encodedValue.charCodeAt(x) : encodedValue.charCodeAt(x));
			}
			
			$.get('http://www.phptest.local/urldecode.php?ascii=' + ascii, function(data) {
				logToObj.innerHTML = data;
				if (data == chr) {
					logToObj.className = 'correct';
				} else {
					logToObj.className = 'wrong';
				}
			});
		},
		
		chrToRawurldecoded : function(chr, encodedValue, logToObj) {
			var ascii = '';
			for (var x=0; x<encodedValue.length; x++) {
				ascii += (ascii.length>0 ? '-'+encodedValue.charCodeAt(x) : encodedValue.charCodeAt(x));
			}
			
			$.get('http://www.phptest.local/rawurldecode.php?ascii=' + ascii, function(data) {
				logToObj.innerHTML = data;
				if (data == chr) {
					logToObj.className = 'correct';
				} else {
					logToObj.className = 'wrong';
				}
			});
		},
	}
	
<?php
	for ($x=0; $x<256; ++$x) {
		// 10 und 13 sind Zeilenumbrueche, welche JS-Fehler erzeugen
		if ($x !== 10 && $x !== 13) {
			$chr = chr($x);
			$chrOutput = addslashes(htmlentities($chr));
			$chrAddSl = addslashes($chr);
			
			echo "window.setTimeout(function() {
				php_examples_decode_encoding.addRow('php-js-decode-encoding-body-1', $x, '$chrOutput', '$chrAddSl', escape('$chrAddSl'));
			}, (256*0*60 + ".($x*60)."));\n";
		}
	}
	
	usleep(1500);
	
	for ($x=0; $x<256; ++$x) {
		// 10 und 13 sind Zeilenumbrueche, welche JS-Fehler erzeugen
		if ($x !== 10 && $x !== 13) {
			$chr = chr($x);
			$chrOutput = addslashes(htmlentities($chr));
			$chrAddSl = addslashes($chr);
			
			echo "window.setTimeout(function() {
				php_examples_decode_encoding.addRow('php-js-decode-encoding-body-2', $x, '$chrOutput', '$chrAddSl', encodeURI('$chrAddSl'));
			}, (256*1*60 + ".($x*60)."));\n";
		}
	}
	
	usleep(1500);
	
	for ($x=0; $x<256; ++$x) {
		// 10 und 13 sind Zeilenumbrueche, welche JS-Fehler erzeugen
		if ($x !== 10 && $x !== 13) {
			$chr = chr($x);
			$chrOutput = addslashes(htmlentities($chr));
			$chrAddSl = addslashes($chr);
			
			echo "window.setTimeout(function() {
				php_examples_decode_encoding.addRow('php-js-decode-encoding-body-3', $x, '$chrOutput', '$chrAddSl', encodeURIComponent('$chrAddSl'));
			}, (256*2*60 + ".($x*60)."));\n";
		}
	}
?>
</script>

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung. OK