URL կոդավորում և վերծանում՝ բացատրված ծրագրավորողների համար
Մուտքագրեք բացատ URL-ում, կամ հայերեն բառ, կամ գումարման նշան, որը պատկանում է ձեր տվյալներին, ոչ թե հասցեին ինքնին, և ինչ-որ բան պետք է զիջի։ Վեբը երաշխավորում է անվտանգ փոխադրում միայն ASCII նիշերի փոքր, կանխատեսելի բազմության համար։ Ամեն ինչ մյուսը պետք է փաթաթված լինի ձևաչափով, որի հետ համաձայն են բոլոր երթուղիչները, սերվերներն ու բրաուզերները։ Այդ ձևաչափը պրոցենտային կոդավորումն է, ավելի հաճախ կոչվում է URL կոդավորում, և այս էջը թույլ է տալիս փոխակերպել տեքստը երկու ուղղությամբ էլ, ուղղակիորեն ձեր բրաուզերում։

Ինչ իրականում է պրոցենտային կոդավորումը
Կանոնը մեխանիկական է և հեշտ հետևելի։ Ցանկացած նիշ, որը չի կարող հայտնվել բառացիորեն, փոխարինվում է % նշանով, որին հաջորդում է երկու տասնվեցական թվանշան, որոնք ցույց են տալիս այդ նիշի բայթի արժեքը։ Բացատը դառնում է %20։ Գումարման նշանը դառնում է %2B։ Համարանիշը դառնում է %23։ Երբ նիշը համապատասխանում է մի քանի բայթի, ինչպես ոչ-ASCII տեքստի մեծ մասը UTF-8-ի ներքո, պարզապես ստանում եք մի քանի եռյակ իրար ետևից. եվրոյի նշանը դառնում է %E2%82%AC։ Վերծանումն այս գործընթացը հակադարձում է՝ ամեն եռյակը կարդալով հետ դեպի իր բնօրինակ բայթը։
Այս պայմանավորվածությունը սահմանված է URI սպեցիֆիկացիայում (RFC 3986), և այն միտումնավոր ձանձրալի է։ Ձանձրալին էլ կարևորն է։ Երկրագնդի յուրաքանչյուր լավ վարվող HTTP հաճախորդ և սերվեր իրագործում է նույն կանոնները, այնպես որ ճիշտ կոդավորված հղումը մի տեղում ամբողջական է ժամանում ամենուր։
Ինչու՞ պետք է գոյություն ունենա
URL-ները կրում են երկու տեսակի նիշեր՝ շատ տարբեր դերերով։ Վերապահված նիշերը, ինչպիսիք են /, ?, #, &, = և :, կառուցվածքային են։ Դրանք վերլուծիչին ասում են, թե որտեղ է ավարտվում ուղին և սկսվում հարցման տողը, կամ որտեղ է ավարտվում մեկ պարամետրը և սկսվում հաջորդը։ Եթե ձեր իրական տվյալները պարունակում են այդ նշաններից մեկը, դա պետք է կոդավորվի, որպեսզի վերլուծիչը այն կետադրական նշան չհամարի։ A&B/2024 պիսի պատվերի հղումը, հում ձևով տեղադրված հարցման տողում, կսխալ մեկնաբանվի որպես երկու պարամետր և ուղու հատված։
Ապա կան անվտանգ չափանիշներից դուրս և ոչ-ASCII նիշեր. բացատներ, չակերտներ, անկյունային փակագծեր, շեշտադրված տառեր, էմոջիներ, ամեն ինչ, որ դուրս է սովորական ASCII տիրույթից։ Դրանք բառացիորեն URL-ում հայտնվելու գործ չունեն, կամ դրանք խեղաթյուրվում են փոխադրման ընթացքում, կամ դրանք չունեն սահմանված ներկայացում։ Դրանք կոդավորելը հղումները մաքուր և կանխատեսելի է պահում, ոչ թե պատահականությանն է թողնում արդյունքը։
Որտեղ է դա հանդիպում իրական աշխատանքում
Հարցման տողերը դասական դեպքն են։ Յուրաքանչյուր արժեք, որը կցում եք ?key=...-ին, պետք է կոդավորվի, որպեսզի օգտատիրոջ մուտքագրումը չկարողանա կոտրել կառուցվածքը։ Նույնը վերաբերում է HTML ձևերի ուղարկմանը application/x-www-form-urlencoded ձևով, երբ բրաուզերն ինքնաբերաբար կոդավորում է դաշտի արժեքները (և, պատմական սովորության համաձայն, բացատները դարձնում է +, ոչ թե %20)։ Կհանդիպեք դրան նաև ոչ-լատինական վերնագրով էջեր ցույց տվող հղումներ կառուցելիս, API հարցումներ ձեռքով ստեղծելիս, վերահղման նպատակակետեր որպես պարամետրեր փոխանցելիս, և կարգաբերելիս, թե ինչու հասցեագոտում լավ երևացող հարցումը սերվերում ժամանում է աղավաղված։

encodeURI ընդդեմ encodeURIComponent-ի
JavaScript-ը երկու կոդավորիչ է առաջարկում, և սխալ մեկն ընտրելը տարածված սխալ է։ Տարբերությունը շրջանակի մասին է։ encodeURIComponent-ը նախատեսված է մեկ առանձին տվյալի, ինչպիսին է մեկ հարցման արժեքը։ Այն կոդավորում է համարյա ամեն ինչ, այդ թվում՝ վերապահված նիշերը /, ?, :, @, &, =, + և #։ Հենց դա է ձեզ պետք, երբ տվյալները թույլատրված են պարունակել այդ նշանները որպես սովորական տեքստ։
encodeURI-ն նախատեսված է ամբողջական հասցեի, որը ցանկանում եք պահել աշխատունակ։ Այն կառուցվածքային նիշերին չի դիպչում, այնպես որ URL-ը միասին պահող թեք գծիկները, երկկետերն ու հարցական նշանները մնում են։ Օգտագործեք այն, երբ ունեք ամբողջական URL և ուզում եք միայն մաքրել բացատներն ու ոչ-ASCII նիշերը. դիմեք encodeURIComponent-ին, երբ արժեք եք տեղադրում ավելի մեծ URL-ի մեջ։ Պարզ կանոն. կոդավորեք ամբողջ հղումը encodeURI-ով, կոդավորեք ձեր տեղադրած մասերը encodeURIComponent-ով։
Ամեն ինչ մնում է ձեր սարքում
Այս գործիքն ամբողջովին աշխատում է ձեր բրաուզերում։ Ձեր տեղադրած տեքստը կոդավորվում կամ վերծանվում է տեղական, նույն ստանդարտ ընթացակարգերով, և երբեք չի ճանապարհորդում սերվեր, ինչը այն անվտանգ է դարձնում տոկենների, ստորագրված պարամետրերի կամ ցանկացած այլ բանի համար, որը դուք ցանկանում եք չուղարկել ցանցով։ Եթե աշխատում եք այլ տեքստային փոխակերպումների հետ, Base64 փոխակերպիչը հենց կողքին է, և կարող եք զննել ամբողջ ծրագրավորողի գործիքների հավաքածուն՝ ամենօրյա այլ օգնականների համար։
Հաճախակի տրվող հարցեր
Ի՞նչ է նշանակում %20-ը URL-ում
Դա կոդավորված բացատ է։ Բացատ նիշը թույլատրված չէ URL-ում բառացիորեն, այնպես որ այն փոխարինվում է պրոցենտային նշանով և 20 տասնվեցական արժեքով, որը բացատի բայթի արժեքն է։
Ինչու՞ եմ երբեմն տեսնում գումարման նշան %20-ի փոխարեն
application/x-www-form-urlencoded տիպի HTML ձևի տվյալները բացատները կոդավորում են գումարման նշանով՝ պատմական սովորության համաձայն։ Սովորական ուղում կամ հարցման տողում բացատը կոդավորվում է %20-ով։ Երկուսն էլ իրենց ճիշտ համատեքստում հակադարձ վերծանվում են բացատի։
Ե՞րբ պետք է օգտագործեմ encodeURIComponent-ը encodeURI-ի փոխարեն
Օգտագործեք encodeURIComponent-ը URL-ի մեջ տեղադրվող մեկ առանձին արժեքի համար, ինչպիսին է հարցման պարամետրը, քանի որ այն կոդավորում է նաև վերապահված նիշերը։ Օգտագործեք encodeURI-ն ամբողջական հասցեի համար, երբ ցանկանում եք պահպանել այն կապող թեք գծիկները, երկկետերն ու հարցական նշանները։
URL կոդավորումը փոխու՞մ է իմ տվյալների իմաստը
Ոչ։ Կոդավորումն ամբողջովին շրջելի է։ Արդյունքի վերծանումը հետ է տալիս ճշգրիտ բնօրինակ տեքստը, բայթ առ բայթ, քանի դեռ երկու ծայրերում էլ օգտագործվում է նույն նիշային բազմությունը։
Ինչպե՞ս են մշակվում ոչ-ASCII նիշերը, ինչպիսիք են շեշտադրված տառերը կամ էմոջիները
Դրանք նախ վերածվում են UTF-8 բայթերի, ապա յուրաքանչյուր բայթ դառնում է իր սեփական պրոցենտային եռյակը։ Մեկ շեշտադրված տառ կամ էմոջի հետևաբար կարող է ընդարձակվել մի քանի եռյակի կոդավորված ելքում։
Իմ տեքստը ուղարկվու՞մ է սերվեր, երբ օգտագործում եմ այս գործիքը
Ոչ։ Կոդավորումն ու վերծանումն ամբողջովին տեղի են ունենում ձեր բրաուզերում։ Ինչ էլ տեղադրեք, չի վերբեռնվում, այնպես որ այն անվտանգ է օգտագործել գաղտնի կամ զգայուն տողերի հետ։
