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 $_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('+'))); ?>
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 |
48 | 0 | 0 | 0 | 0 | 0 | 0 |
49 | 1 | 1 | 1 | 1 | 1 | 1 |
50 | 2 | 2 | 2 | 2 | 2 | 2 |
51 | 3 | 3 | 3 | 3 | 3 | 3 |
52 | 4 | 4 | 4 | 4 | 4 | 4 |
53 | 5 | 5 | 5 | 5 | 5 | 5 |
54 | 6 | 6 | 6 | 6 | 6 | 6 |
55 | 7 | 7 | 7 | 7 | 7 | 7 |
56 | 8 | 8 | 8 | 8 | 8 | 8 |
57 | 9 | 9 | 9 | 9 | 9 | 9 |
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 |
65 | A | A | A | A | A | A |
66 | B | B | B | B | B | B |
67 | C | C | C | C | C | C |
68 | D | D | D | D | D | D |
69 | E | E | E | E | E | E |
70 | F | F | F | F | F | F |
71 | G | G | G | G | G | G |
72 | H | H | H | H | H | H |
73 | I | I | I | I | I | I |
74 | J | J | J | J | J | J |
75 | K | K | K | K | K | K |
76 | L | L | L | L | L | L |
77 | M | M | M | M | M | M |
78 | N | N | N | N | N | N |
79 | O | O | O | O | O | O |
80 | P | P | P | P | P | P |
81 | Q | Q | Q | Q | Q | Q |
82 | R | R | R | R | R | R |
83 | S | S | S | S | S | S |
84 | T | T | T | T | T | T |
85 | U | U | U | U | U | U |
86 | V | V | V | V | V | V |
87 | W | W | W | W | W | W |
88 | X | X | X | X | X | X |
89 | Y | Y | Y | Y | Y | Y |
90 | Z | Z | Z | Z | Z | Z |
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 |
97 | a | a | a | a | a | a |
98 | b | b | b | b | b | b |
99 | c | c | c | c | c | c |
100 | d | d | d | d | d | d |
101 | e | e | e | e | e | e |
102 | f | f | f | f | f | f |
103 | g | g | g | g | g | g |
104 | h | h | h | h | h | h |
105 | i | i | i | i | i | i |
106 | j | j | j | j | j | j |
107 | k | k | k | k | k | k |
108 | l | l | l | l | l | l |
109 | m | m | m | m | m | m |
110 | n | n | n | n | n | n |
111 | o | o | o | o | o | o |
112 | p | p | p | p | p | p |
113 | q | q | q | q | q | q |
114 | r | r | r | r | r | r |
115 | s | s | s | s | s | s |
116 | t | t | t | t | t | t |
117 | u | u | u | u | u | u |
118 | v | v | v | v | v | v |
119 | w | w | w | w | w | w |
120 | x | x | x | x | x | x |
121 | y | y | y | y | y | y |
122 | z | z | z | z | z | z |
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.
<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 | / | / | / | / |
48 | 0 | 0 | 0 | 0 |
49 | 1 | 1 | 1 | 1 |
50 | 2 | 2 | 2 | 2 |
51 | 3 | 3 | 3 | 3 |
52 | 4 | 4 | 4 | 4 |
53 | 5 | 5 | 5 | 5 |
54 | 6 | 6 | 6 | 6 |
55 | 7 | 7 | 7 | 7 |
56 | 8 | 8 | 8 | 8 |
57 | 9 | 9 | 9 | 9 |
58 | : | %3A | : | : |
59 | ; | %3B | ; | ; |
60 | < | %3C | < | < |
61 | = | %3D | = | = |
62 | > | %3E | > | > |
63 | ? | %3F | ? | ? |
64 | @ | @ | @ | @ |
65 | A | A | A | A |
66 | B | B | B | B |
67 | C | C | C | C |
68 | D | D | D | D |
69 | E | E | E | E |
70 | F | F | F | F |
71 | G | G | G | G |
72 | H | H | H | H |
73 | I | I | I | I |
74 | J | J | J | J |
75 | K | K | K | K |
76 | L | L | L | L |
77 | M | M | M | M |
78 | N | N | N | N |
79 | O | O | O | O |
80 | P | P | P | P |
81 | Q | Q | Q | Q |
82 | R | R | R | R |
83 | S | S | S | S |
84 | T | T | T | T |
85 | U | U | U | U |
86 | V | V | V | V |
87 | W | W | W | W |
88 | X | X | X | X |
89 | Y | Y | Y | Y |
90 | Z | Z | Z | Z |
91 | [ | %5B | [ | [ |
92 | \ | %5C | \ | \ |
93 | ] | %5D | ] | ] |
94 | ^ | %5E | ^ | ^ |
95 | _ | _ | _ | _ |
96 | ` | %60 | ` | ` |
97 | a | a | a | a |
98 | b | b | b | b |
99 | c | c | c | c |
100 | d | d | d | d |
101 | e | e | e | e |
102 | f | f | f | f |
103 | g | g | g | g |
104 | h | h | h | h |
105 | i | i | i | i |
106 | j | j | j | j |
107 | k | k | k | k |
108 | l | l | l | l |
109 | m | m | m | m |
110 | n | n | n | n |
111 | o | o | o | o |
112 | p | p | p | p |
113 | q | q | q | q |
114 | r | r | r | r |
115 | s | s | s | s |
116 | t | t | t | t |
117 | u | u | u | u |
118 | v | v | v | v |
119 | w | w | w | w |
120 | x | x | x | x |
121 | y | y | y | y |
122 | z | z | z | z |
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 | / | / | / | / |
48 | 0 | 0 | 0 | 0 |
49 | 1 | 1 | 1 | 1 |
50 | 2 | 2 | 2 | 2 |
51 | 3 | 3 | 3 | 3 |
52 | 4 | 4 | 4 | 4 |
53 | 5 | 5 | 5 | 5 |
54 | 6 | 6 | 6 | 6 |
55 | 7 | 7 | 7 | 7 |
56 | 8 | 8 | 8 | 8 |
57 | 9 | 9 | 9 | 9 |
58 | : | : | : | : |
59 | ; | ; | ; | ; |
60 | < | %3C | < | < |
61 | = | = | = | = |
62 | > | %3E | > | > |
63 | ? | ? | ? | ? |
64 | @ | @ | @ | @ |
65 | A | A | A | A |
66 | B | B | B | B |
67 | C | C | C | C |
68 | D | D | D | D |
69 | E | E | E | E |
70 | F | F | F | F |
71 | G | G | G | G |
72 | H | H | H | H |
73 | I | I | I | I |
74 | J | J | J | J |
75 | K | K | K | K |
76 | L | L | L | L |
77 | M | M | M | M |
78 | N | N | N | N |
79 | O | O | O | O |
80 | P | P | P | P |
81 | Q | Q | Q | Q |
82 | R | R | R | R |
83 | S | S | S | S |
84 | T | T | T | T |
85 | U | U | U | U |
86 | V | V | V | V |
87 | W | W | W | W |
88 | X | X | X | X |
89 | Y | Y | Y | Y |
90 | Z | Z | Z | Z |
91 | [ | %5B | [ | [ |
92 | \ | %5C | \ | \ |
93 | ] | %5D | ] | ] |
94 | ^ | %5E | ^ | ^ |
95 | _ | _ | _ | _ |
96 | ` | %60 | ` | ` |
97 | a | a | a | a |
98 | b | b | b | b |
99 | c | c | c | c |
100 | d | d | d | d |
101 | e | e | e | e |
102 | f | f | f | f |
103 | g | g | g | g |
104 | h | h | h | h |
105 | i | i | i | i |
106 | j | j | j | j |
107 | k | k | k | k |
108 | l | l | l | l |
109 | m | m | m | m |
110 | n | n | n | n |
111 | o | o | o | o |
112 | p | p | p | p |
113 | q | q | q | q |
114 | r | r | r | r |
115 | s | s | s | s |
116 | t | t | t | t |
117 | u | u | u | u |
118 | v | v | v | v |
119 | w | w | w | w |
120 | x | x | x | x |
121 | y | y | y | y |
122 | z | z | z | z |
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 | / | / |
48 | 0 | 0 | 0 | 0 |
49 | 1 | 1 | 1 | 1 |
50 | 2 | 2 | 2 | 2 |
51 | 3 | 3 | 3 | 3 |
52 | 4 | 4 | 4 | 4 |
53 | 5 | 5 | 5 | 5 |
54 | 6 | 6 | 6 | 6 |
55 | 7 | 7 | 7 | 7 |
56 | 8 | 8 | 8 | 8 |
57 | 9 | 9 | 9 | 9 |
58 | : | %3A | : | : |
59 | ; | %3B | ; | ; |
60 | < | %3C | < | < |
61 | = | %3D | = | = |
62 | > | %3E | > | > |
63 | ? | %3F | ? | ? |
64 | @ | %40 | @ | @ |
65 | A | A | A | A |
66 | B | B | B | B |
67 | C | C | C | C |
68 | D | D | D | D |
69 | E | E | E | E |
70 | F | F | F | F |
71 | G | G | G | G |
72 | H | H | H | H |
73 | I | I | I | I |
74 | J | J | J | J |
75 | K | K | K | K |
76 | L | L | L | L |
77 | M | M | M | M |
78 | N | N | N | N |
79 | O | O | O | O |
80 | P | P | P | P |
81 | Q | Q | Q | Q |
82 | R | R | R | R |
83 | S | S | S | S |
84 | T | T | T | T |
85 | U | U | U | U |
86 | V | V | V | V |
87 | W | W | W | W |
88 | X | X | X | X |
89 | Y | Y | Y | Y |
90 | Z | Z | Z | Z |
91 | [ | %5B | [ | [ |
92 | \ | %5C | \ | \ |
93 | ] | %5D | ] | ] |
94 | ^ | %5E | ^ | ^ |
95 | _ | _ | _ | _ |
96 | ` | %60 | ` | ` |
97 | a | a | a | a |
98 | b | b | b | b |
99 | c | c | c | c |
100 | d | d | d | d |
101 | e | e | e | e |
102 | f | f | f | f |
103 | g | g | g | g |
104 | h | h | h | h |
105 | i | i | i | i |
106 | j | j | j | j |
107 | k | k | k | k |
108 | l | l | l | l |
109 | m | m | m | m |
110 | n | n | n | n |
111 | o | o | o | o |
112 | p | p | p | p |
113 | q | q | q | q |
114 | r | r | r | r |
115 | s | s | s | s |
116 | t | t | t | t |
117 | u | u | u | u |
118 | v | v | v | v |
119 | w | w | w | w |
120 | x | x | x | x |
121 | y | y | y | y |
122 | z | z | z | z |
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 $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 $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:
<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>