Рамзгузорӣ ва рамзкушоии 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 фосилаҳоро тибқи конвенсияи таърихӣ бо аломати плюс рамзгузорӣ мекунад. Дар роҳ ё дархости муқаррарӣ, фосила ҳамчун %20 рамзгузорӣ мешавад. Ҳарду дар матни дурусти худ ба фосила бармегарданд.
Кай бояд encodeURIComponent-ро ба ҷои encodeURI истифода барам?
encodeURIComponent-ро барои як арзише истифода баред, ки ба URL дарунсохт мекунед, ба монанди параметри дархост, зеро он аломатҳои эҳтиётиро низ рамзгузорӣ мекунад. encodeURI-ро барои суроғаи пурра истифода баред, вақте мехоҳед хатҳо, ду нуқтаҳо ва аломатҳои саволеро, ки онро якҷоя нигоҳ медоранд, нигоҳ доред.
Оё рамзгузории URL маънои маълумоти маро тағйир медиҳад?
Не. Рамзгузорӣ пурра баргарданда аст. Рамзкушоии натиҷа дақиқ матни аслиро, байт ба байт, бармегардонад, то даме ки ҳамон маҷмӯаи аломатҳо дар ҳарду тараф истифода мешавад.
Аломатҳои на-ASCII ба монанди аксентҳо ё эмоҷи чӣ гуна коркард мешаванд?
Онҳо аввал ба байтҳои UTF-8 табдил меёбанд, сипас ҳар байт секаратаи фоизии худро мегирад. Як ҳарфи аксентдор ё эмоҷи метавонад бинобар ин ба якчанд секарата дар барориши рамзгузошта тавсеа ёбад.
Оё матни ман ҳангоми истифодаи ин абзор ба сервер фиристода мешавад?
Не. Рамзгузорӣ ва рамзкушоӣ комилан дар браузери шумо сурат мегирад. Ҳеҷ чизе, ки шумо мечаспонед, бор карда намешавад, бинобар ин истифодаи он бо сатрҳои хусусӣ ё ҳассос бехатар аст.
