Skip to content

Commit 7044ee6

Browse files
committed
End
1 parent e4c1574 commit 7044ee6

File tree

1 file changed

+30
-30
lines changed

1 file changed

+30
-30
lines changed

5-network/07-url/article.md

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
Вбудований клас [URL](https://url.spec.whatwg.org/#api) надає зручний інтерфейс для створення та розбирання URL на частини.
55

6-
Методи, що дають змогу зробити мережевий запит, не вимагають саме екземпляр класу `URL`, досить передати рядок. Тому нас нічого не зобов'язує використовувати клас `URL`. Але це дійсно може стати в нагоді.
6+
Методи, що дають змогу зробити мережевий запит, досить передати просто рядок, вони не вимагають саме екземпляр класу `URL`. Тому нас нічого не зобов'язує використовувати клас `URL`. Але це дійсно може стати в нагоді.
77

88
## Створення URL
99

@@ -135,46 +135,46 @@ alert(url); // https://uk.wikipedia.org/wiki/%D0%A2%D0%B5%D1%81%D1%82?key=%D1%97
135135

136136
URL-адреса стала довшою, бо кожен кириличний символ представлено двома байтами в UTF-8, тому там дві групи символів `%..`.
137137

138-
### Encoding strings
138+
### Кодування рядків
139139

140-
In old times, before `URL` objects appeared, people used strings for URLs.
140+
До появи `URL`, розробники використовували рядки для URL-адрес.
141141

142-
As of now, `URL` objects are often more convenient, but strings can still be used as well. In many cases using a string makes the code shorter.
142+
Наразі, зручніше використовувати `URL`, але рядки все ще можна використовувати. У більшості випадків, використання рядків потребує менше коду.
143143

144-
If we use a string though, we need to encode/decode special characters manually.
144+
Слід зауважити, якщо ми використовуємо рядки, то закодувати та декодувати символи нам потрібно вручну.
145145

146-
There are built-in functions for that:
146+
Для цього є вбудовані функції:
147147

148-
- [encodeURI](mdn:/JavaScript/Reference/Global_Objects/encodeURI) - encodes URL as a whole.
149-
- [decodeURI](mdn:/JavaScript/Reference/Global_Objects/decodeURI) - decodes it back.
150-
- [encodeURIComponent](mdn:/JavaScript/Reference/Global_Objects/encodeURIComponent) - encodes a URL component, such as a search parameter, or a hash, or a pathname.
151-
- [decodeURIComponent](mdn:/JavaScript/Reference/Global_Objects/decodeURIComponent) - decodes it back.
148+
- [encodeURI](mdn:/JavaScript/Reference/Global_Objects/encodeURI) - закодувати URL-адресу повністю.
149+
- [decodeURI](mdn:/JavaScript/Reference/Global_Objects/decodeURI) - розкодувати її.
150+
- [encodeURIComponent](mdn:/JavaScript/Reference/Global_Objects/encodeURIComponent) - закодувати частину URL-адреси, наприклад, параметри пошуку, шлях чи геш.
151+
- [decodeURIComponent](mdn:/JavaScript/Reference/Global_Objects/decodeURIComponent) - розкодувати відповідну частину.
152152

153-
A natural question is: "What's the difference between `encodeURIComponent` and `encodeURI`? When we should use either?"
153+
Може виникнути природне питання: "Яка різниця між `encodeURIComponent` та `encodeURI`? В якому випадку краще використовувати кожну функцію?"
154154

155-
That's easy to understand if we look at the URL, that's split into components in the picture above:
155+
Це стає легше зрозуміти, якщо подивитися на URL-адресу, що показано розділеною на частини вище.
156156

157157
```
158158
https://site.com:8080/path/page?p1=v1&p2=v2#hash
159159
```
160160

161-
As we can see, characters such as `:`, `?`, `=`, `&`, `#` are allowed in URL.
161+
Як бачимо, символи `:`, `?`, `=`, `&`, `#` дозволено безпосередньо використовувати в URL.
162162

163-
...On the other hand, if we look at a single URL component, such as a search parameter, these characters must be encoded, not to break the formatting.
163+
...На противагу цьому, якщо ми поглянемо тільки на параметри пошуку URL, то використані там символи повинні бути закодовані, щоб не зламати форматування.
164164

165-
- `encodeURI` encodes only characters that are totally forbidden in URL.
166-
- `encodeURIComponent` encodes same characters, and, in addition to them, characters `#`, `$`, `&`, `+`, `,`, `/`, `:`, `;`, `=`, `?` and `@`.
165+
- `encodeURI` кодує тільки символи, що заборонені до використання в URL.
166+
- `encodeURIComponent` закодує деякі символи та символи: `#`, `$`, `&`, `+`, `,`, `/`, `:`, `;`, `=`, `?` та `@`.
167167

168-
So, for a whole URL we can use `encodeURI`:
168+
Отже, для кодування всього URL можна використати `encodeURI`:
169169

170170
```js run
171-
// using cyrillic characters in url path
172-
let url = encodeURI('http://site.com/привет');
171+
// використання кириличних символі в шляху url
172+
let url = encodeURI('http://site.com/привіт');
173173

174-
alert(url); // http://site.com/%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82
174+
alert(url); // http://site.com/%D0%BF%D1%80%D0%B8%D0%B2%D1%96%D1%82
175175
```
176176

177-
...While for URL parameters we should use `encodeURIComponent` instead:
177+
...Проте, для URL параметрів нам знадобиться використати `encodeURIComponent`:
178178

179179
```js run
180180
let music = encodeURIComponent('Rock&Roll');
@@ -183,7 +183,7 @@ let url = `https://google.com/search?q=${music}`;
183183
alert(url); // https://google.com/search?q=Rock%26Roll
184184
```
185185

186-
Compare it with `encodeURI`:
186+
Порівняймо його з `encodeURI`:
187187

188188
```js run
189189
let music = encodeURI('Rock&Roll');
@@ -192,16 +192,16 @@ let url = `https://google.com/search?q=${music}`;
192192
alert(url); // https://google.com/search?q=Rock&Roll
193193
```
194194

195-
As we can see, `encodeURI` does not encode `&`, as this is a legit character in URL as a whole.
195+
Як бачимо, `encodeURI` не кодує символ `&`, оскільки це дозволений для використання в URL.
196196

197-
But we should encode `&` inside a search parameter, otherwise, we get `q=Rock&Roll` - that is actually `q=Rock` plus some obscure parameter `Roll`. Not as intended.
197+
Але нам потрібно закодувати `&` всередині параметрів пошуку, інакше ми отримаємо `q=Rock&Roll`, що означатиме `q=Rock` та незрозумілий параметр `Roll`. Не те, що ми очікували.
198198

199-
So we should use only `encodeURIComponent` for each search parameter, to correctly insert it in the URL string. The safest is to encode both name and value, unless we're absolutely sure that it has only allowed characters.
199+
Нам слід використовувати тільки `encodeURIComponent` з параметрами пошуку для правильного вставлення в рядок URL. Для повної безпеки, слід кодувати ім'я та значення параметрів, якщо ми не можемо бути повністю впевненими, що вони містять тільки дозволені символи.
200200

201-
````smart header="Encoding difference compared to `URL`"
202-
Classes [URL](https://url.spec.whatwg.org/#url-class) and [URLSearchParams](https://url.spec.whatwg.org/#interface-urlsearchparams) are based on the latest URI specification: [RFC3986](https://tools.ietf.org/html/rfc3986), while `encode*` functions are based on the obsolete version [RFC2396](https://www.ietf.org/rfc/rfc2396.txt).
201+
````smart header="Різниця в кодуванні у порівнянні з `URL`"
202+
Класи [URL](https://url.spec.whatwg.org/#url-class) та [URLSearchParams](https://url.spec.whatwg.org/#interface-urlsearchparams) ґрунтуються на останній специфікації URL: [RFC3986](https://tools.ietf.org/html/rfc3986), але функції `encode*` використовують застарілу версію [RFC2396](https://www.ietf.org/rfc/rfc2396.txt).
203203

204-
There are a few differences, e.g. IPv6 addresses are encoded differently:
204+
Існують деякі відмінності, як от IPv6 адреси кодуються по-іншому:
205205

206206
```js run
207207
// valid url with IPv6 address
@@ -211,7 +211,7 @@ alert(encodeURI(url)); // http://%5B2607:f8b0:4005:802::1007%5D/
211211
alert(new URL(url)); // http://[2607:f8b0:4005:802::1007]/
212212
```
213213

214-
As we can see, `encodeURI` replaced square brackets `[...]`, that's not correct, the reason is: IPv6 urls did not exist at the time of RFC2396 (August 1998).
214+
Як бачимо, `encodeURI` заміню квадратні дужки `[...]`, що є помилкою, причиною є те, що IPv6 адреси ще не існували в часи створення стандарту RFC2396 (серпень 1998).
215215

216-
Such cases are rare, `encode*` functions work well most of the time.
216+
Такі випадки рідко трапляються, функції `encode*` добре справляються в більшості випадків.
217217
````

0 commit comments

Comments
 (0)