نشانی وب encoding/url
تجزیهی نشانی وب به بخشهایش، ساختن و ویرایش پارامترها و پیوستن نشانیهای نسبی.
واردسازی کدگذاری.نشانی وب
این بسته با نشانیهای کامل وب کار میکند. تجزیه نشانی نشانیای مثل https://[email protected]:8443/path?page=2#top را به ساختار نشانی وب با فیلدهای scheme، userinfo، host، port، path، raw_query و fragment میشکند و متن آن را دوباره سرهم میکند. در کنار این دو، تابعهایی برای ویرایش پارامترهای پرسوجو، کامل کردن پیوندهای نسبی با پیوستن نشانی و پیدا کردن دامنهی ثبتشدنی یک میزبان هست.
هر وقت نشانی کامل در دست دارید از این بسته استفاده کنید. برای بخش a=1&b=2 بهتنهایی، مثلاً بدنهی یک فرم، بستهی پرسوجو مناسب است؛ برای کدگذاری درصدی یک رشتهی تکی، کدگذاری نشانی در بستهی کدگذاری؛ و برای گرفتن خود نشانی، اچ تی تی پی.
بخشهای خام و کدگشاییشده
فیلدها متن را دقیقاً همانطور که آمده، همراه با گریزهای درصدی، نگه میدارند؛ برای همین متن(تجزیه نشانی(x)) معمولاً همان x را برمیگرداند. شکل خوانا را با مسیر کدگشاییشده، اطلاعات کاربر کدگشاییشده یا پرسوجو بخوانید. وقتی خودتان فیلدی را مقدار میدهید، متن کدگذاریشده در آن بگذارید: بخشهای مسیر را با کدگذاری بخش مسیر بگریزانید و پرسوجو را با تنظیم پرسوجو بسازید.
اشتباههای رایج
تجزیه نشانیهیچوقت شکست نمیخورد. هیچ اعتبارسنجیای نمیکند: درگاهی که عدد نباشد0میشود، و متنی که://ندارد (از جملهmailto:[email protected]) طرح و میزبان ندارد و تمامش درpathمینشیند. پیش از اعتماد به نشانیای که کاربر داده،schemeوhostرا خودتان بررسی کنید.- هیچ چیز کوچک نمیشود. در
HTTPS://Shop.Example.COMبزرگی و کوچکی حروف درschemeوhostمیماند ودامنههمExample.COMبرمیگرداند. پیش از مقایسهی میزبان یا دامنه، بارشته.کوچکحروف را کوچک کنید. - ویرایش یک پارامتر کل پرسوجو را بازنویسی میکند.
حذف پارامتر،تنظیم پارامترونگه داشتن پارامترهاپرسوجو را کدگشایی و دوباره کدگذاری میکنند:%20به+تبدیل میشود، نویسههایی مثل*گریزانده میشوند،flagتنها بهflag=تبدیل میشود و کلیدهای تکراری کنار هم قرار میگیرند. معنا همان میماند، ولی متن ممکن است عوض شود. پیوستن نشانیبا ارجاعی که فقط?پرسشیا#بخشاست، نام پروندهی پایه را از دست میدهد، برخلاف مرورگر. راهنمای پیوندها را ببینید.
راهنما: حذف پارامترهای ردیابی
پیوندهایی که از ایمیل و شبکههای اجتماعی کپی میشوند پارامترهای utm_ و شناسهی کلیک دارند که فقط به کار آمارگیری میآیند. پیش از ذخیره یا مقایسهی پیوندها، آنها را تجزیه کنید، این پارامترها را با حذف پارامتر بردارید، بخش پس از # را پاک کنید و نتیجه را با متن بسازید. پارامترهایی که میمانند ترتیبشان را نگه میدارند.
واردسازی کدگذاری.نشانی وب
تابع پاکسازی(خام: رشته): رشته:
ناپایا ن := نشانی وب.تجزیه نشانی(خام)
نامها := نشانی وب.نام پارامترها(ن)
هر نام در نامها:
اگر نام.شروع با("utm_") یا نام == "fbclid" یا نام == "gclid":
_ := نشانی وب.حذف پارامتر(ن، نام)
پایان
پایان
ن.قطعه = ""
برگشت نشانی وب.متن(ن)
پایان
تابع ریشه:
سرچاپ پاکسازی("https://shop.example/item/42?color=red&utm_source=news&utm_medium=email#reviews")
سرچاپ پاکسازی("https://blog.example/post?fbclid=IwAR0abc")
سرچاپ پاکسازی("https://example.com/search?q=salam%20lang&utm_campaign=fall&page=2&debug")
پایاننام پارامترها رونوشتی از نامها برمیگرداند، پس حذف پارامتر درون حلقه بیخطر است. فیلدهای نشانی وب رشتههای سادهایاند که میتوانید مستقیم مقدار بدهید، مثل ن.fragment = "". سطر آخر همان بازنویسیای را نشان میدهد که بالاتر گفته شد: salam%20lang به شکل salam+lang و debug تنها به شکل debug= درمیآید. برای سرور هر دو یک معنا دارند، ولی اگر پیوند پاکشده را کلید حافظهی نهان یا پایگاه داده میکنید، همهی پیوندها را به یک روش پاک کنید تا پیوندهای برابر متن برابر بدهند.
راهنما: کامل کردن پیوندهای یک صفحه
یک خزنده یا بررسیگر پیوند، پیوندهای نسبی مثل ../api/json.html را در صفحه پیدا میکند و نشانی کامل لازم دارد. پیوستن نشانی یک ارجاع را نسبت به نشانی خود صفحه همانطور که مرورگر میکند حل میکند: ./ و ../ در پوشهها جابهجا میشوند، / در آغاز از ریشهی پایگاه شروع میکند، //میزبان طرح نشانی را نگه میدارد و یک نشانی کامل جای همه چیز را میگیرد.
واردسازی کدگذاری.نشانی وب
تابع ریشه:
صفحه := نشانی وب.تجزیه نشانی("https://docs.example.com/guide/start/index.html?lang=en")
پیوندها := ["install.html"، "./setup/linux.html"، "../api/json.html"، "/blog/"، "https://other.example/x"، "//cdn.example.com/app.js"]
هر پ در پیوندها:
سرچاپ پ، "->"، نشانی وب.متن(نشانی وب.پیوستن نشانی(صفحه، پ))
پایان
پایانارجاعی که فقط پرسش است (?lang=fa) یا فقط بخش پس از # (#top) هنوز نام پروندهی پایه را نگه نمیدارد، پس اینها را خودتان حل کنید: روی رونوشتی از نشانی پایه raw_query یا fragment را تنظیم کنید.
راهنما: آیا همان پایگاه است؟
برای اینکه تغییر مسیر را فقط درون پایگاه خودتان مجاز کنید، یا پیوندها را بر پایهی مالکشان دستهبندی کنید، دامنهی ثبتشدنی را مقایسه کنید، نه نام میزبان را. دامنه بخشی است که کسی ثبت میکند، مثل example.co.uk؛ پسوند عمومی بخشی است که هر کسی زیر آن ثبت میکند؛ زیردامنه چیزی است که در سمت چپ میماند. نشانیای که از یک IP ساخته شده دامنه ندارد، پس آنجا نام میزبان را مقایسه کنید. نام میزبان به بزرگی و کوچکی حروف حساس نیست ولی بسته آن را دست نمیزند، برای همین برنامه پیش از تجزیه هر دو نشانی را کوچک میکند.
واردسازی کدگذاری.نشانی وب
واردسازی رشته
تابع هم پایگاه(الف: رشته، ب: رشته): منطقی:
نا := نشانی وب.تجزیه نشانی(رشته.کوچک(الف))
نب := نشانی وب.تجزیه نشانی(رشته.کوچک(ب))
اگر نشانی وب.نشانی عددی است(نا) یا نشانی وب.نشانی عددی است(نب):
برگشت نشانی وب.نام میزبان(نا) == نشانی وب.نام میزبان(نب)
پایان
برگشت نشانی وب.دامنه(نا) == نشانی وب.دامنه(نب)
پایان
تابع ریشه:
ن := نشانی وب.تجزیه نشانی("https://api.eu.shop.example.co.uk:8443/v1/orders")
سرچاپ "میزبان:"، نشانی وب.نام میزبان(ن)، "درگاه:"، ن.درگاه
سرچاپ "دامنه:"، نشانی وب.دامنه(ن)، "پسوند:"، نشانی وب.پسوند عمومی(ن)، "زیردامنه:"، نشانی وب.زیردامنه(ن)
سرچاپ هم پایگاه("https://www.example.com/a"، "https://login.example.com/b")
سرچاپ هم پایگاه("https://WWW.Example.com/"، "https://example.com/cart")
سرچاپ هم پایگاه("https://example.com/"، "https://example.org/")
سرچاپ هم پایگاه("http://10.0.0.5:8080/"، "http://10.0.0.5/")
پایاناین بسته پسوندهای عمومی رایج مثل com، co.uk و com.au را میشناسد، نه فهرست کامل پسوندهای عمومی را، پس سکوهای میزبانی که به هر مشتری یک زیردامنه میدهند ممکن است یک پایگاه شمرده شوند. هر جا مهم است، این میزبانها را با نامشان بررسی کنید.
راهنما: ساختن نشانی از ورودی کاربر
وقتی بخشهایی از نشانی از کاربر میآید، هر بخش مسیر را با کدگذاری بخش مسیر بگریزانید که / را هم میگریزاند تا نام یک پرونده نتواند پوشهی تازه بسازد. پارامترها را در یک نگاشت پرسوجو بگذارید و با تنظیم پرسوجو به نشانی بچسبانید؛ افزودن اجازه میدهد یک کلید چند بار بیاید.
واردسازی کدگذاری.نشانی وب
واردسازی کدگذاری.پرسوجو
تابع ریشه:
پوشه := "My Files"
نام := "report 2026/Q3.pdf"
ناپایا ن := نشانی وب.تجزیه نشانی("https://files.example.com")
ن.مسیر = "/users/sara/" + نشانی وب.کدگذاری بخش مسیر(پوشه) + "/" + نشانی وب.کدگذاری بخش مسیر(نام)
ناپایا پ := پرسوجو.نگاشت پرسوجو جدید()
پرسوجو.تنظیم(پ، "download"، "1")
پرسوجو.افزودن(پ، "tag"، "finance")
پرسوجو.افزودن(پ، "tag"، "سهماهه")
نشانی وب.تنظیم پرسوجو(ن، پ)
کامل := نشانی وب.متن(ن)
سرچاپ کامل
برگشتی := نشانی وب.تجزیه نشانی(کامل)
سرچاپ "مسیر:"، نشانی وب.مسیر کدگشاییشده(برگشتی)
سرچاپ "برچسبها:"، پرسوجو.همه مقدارها(برگشتی.پرسوجوی خام، "tag")
پایانمسیر کدگشاییشده مسیر خوانا را میدهد ولی %2F را دوباره / میکند، پس نمیتواند خط مورب درون یک نام را از مرز پوشه جدا کند. وقتی نامها را دقیق لازم دارید، اول ن.path را در / بشکنید و هر بخش را جدا کدگشایی کنید.
گونهها
نشانی وب URL
ساختار نشانی وب| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| طرح | scheme | رشته = "" | طرح، مثل https. |
| اطلاعات کاربر | userinfo | رشته = "" | نام کاربر و گذرواژه پیش از @، کدگذاریشده. |
| میزبان | host | رشته = "" | نام میزبان یا نشانی عددی. |
| درگاه | port | صحیح = 0 | درگاه؛ صفر اگر نیامده باشد. |
| مسیر | path | رشته = "" | مسیر، کدگذاریشده. |
| پرسوجوی خام | raw_query | رشته = "" | پرسوجو بعد از ?، کدگذاریشده. |
| قطعه | fragment | رشته = "" | بخش بعد از #. |
واردسازی کدگذاری.نشانی وب
واردسازی کدگذاری.پرسوجو
تابع ریشه:
ناپایا ن := نشانی وب.تجزیه نشانی("https://user%20a:[email protected]:8443/کتاب/%D8%B3%D9%84%D8%A7%D9%85?page=2&sort=new#top")
سرچاپ ن.طرح، ن.میزبان، ن.درگاه، ن.مسیر، ن.پرسوجوی خام، ن.قطعه
سرچاپ نشانی وب.نام میزبان(ن)، نشانی وب.میزبان با درگاه(ن)، نشانی وب.نشانی عددی است(ن)
سرچاپ نشانی وب.برچسبهای میزبان(ن)، نشانی وب.پسوند عمومی(ن)، نشانی وب.دامنه(ن)، نشانی وب.زیردامنه(ن)
سرچاپ نشانی وب.مسیر کدگشاییشده(ن)، نشانی وب.اطلاعات کاربر کدگشاییشده(ن)
سرچاپ نشانی وب.نام پارامترها(ن)، پرسوجو.اندازه(نشانی وب.پرسوجو(ن))
نشانی وب.تنظیم پارامتر(ن، "page"، "3")
سرچاپ نشانی وب.حذف پارامتر(ن، "sort")، نشانی وب.متن(ن)
ناپایا نگه := وکتور {} برگردان وکتور<رشته>
نگه.بیفزا("page")
نشانی وب.نگه داشتن پارامترها(ن، نگه)
ناپایا پ := پرسوجو.نگاشت پرسوجو جدید()
پرسوجو.افزودن(پ، "q"، "سلام دنیا")
نشانی وب.تنظیم پرسوجو(ن، پ)
سرچاپ نشانی وب.متن(ن)
نشانی وب.پاک کردن پرسوجو(ن)
سرچاپ نشانی وب.متن(ن)
سرچاپ نشانی وب.متن(نشانی وب.پیوستن نشانی(ن، "../img/a.png"))، نشانی وب.کدگذاری بخش مسیر("a b/c")
سرچاپ نشانی وب.نشانی عددی است(نشانی وب.تجزیه نشانی("http://127.0.0.1/"))
پایانتابعها
نام میزبان Hostname
تابع نام میزبان(u: نشانی وب): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
نشانی عددی است IsIP
تابع نشانی عددی است(u: نشانی وب): منطقی: داشته باشد (نشانی IPv6)، درست برمیگرداند. بازهی رقمها بررسی نمیشود.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
برچسبهای میزبان Labels
تابع برچسبهای میزبان(u: نشانی وب): وکتور<رشته>نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
پسوند عمومی PublicSuffix
تابع پسوند عمومی(u: نشانی وب): رشتهco.uk یا ir.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
دامنه Domain
تابع دامنه(u: نشانی وب): رشتهexample.co.uk. نشانی IP یا میزبان تکبخشی مثل localhost بدون تغییر برمیگردد. بزرگی و کوچکی حروف حفظ میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
زیردامنه Subdomain
تابع زیردامنه(u: نشانی وب): رشتهshop.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
حذف پارامتر RemoveParam
تابع حذف پارامتر(u &: نشانی وب، key: رشته): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
تنظیم پارامتر SetParam
تابع تنظیم پارامتر(u &: نشانی وب، key: رشته، val: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
نگه داشتن پارامترها KeepParams
تابع نگه داشتن پارامترها(u &: نشانی وب، keep: وکتور<رشته>)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
پاک کردن پرسوجو ClearQuery
تابع پاک کردن پرسوجو(u &: نشانی وب)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
نام پارامترها ParamNames
تابع نام پارامترها(u: نشانی وب): وکتور<رشته>نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
تجزیه نشانی Parse
تابع تجزیه نشانی(raw: رشته): نشانی وب:// (یا // در آغاز) دارد طرح و میزبان میگیرد، و درگاهی که عدد نباشد صفر میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
میزبان با درگاه HostPort
تابع میزبان با درگاه(u: نشانی وب): رشتهshop.example.co.uk:8443.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
متن String
تابع متن(u: نشانی وب): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
مسیر کدگشاییشده DecodedPath
تابع مسیر کدگشاییشده(u: نشانی وب): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
اطلاعات کاربر کدگشاییشده DecodedUserinfo
تابع اطلاعات کاربر کدگشاییشده(u: نشانی وب): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
کدگذاری بخش مسیر EncodePathSegment
تابع کدگذاری بخش مسیر(s: رشته): رشته/ هم کدگذاری میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
پرسوجو Query
تابع پرسوجو(u: نشانی وب): query.QueryMapنگاشت پرسوجو تبدیل میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
تنظیم پرسوجو SetQuery
تابع تنظیم پرسوجو(u &: نشانی وب، q: query.QueryMap)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam
پیوستن نشانی Join
تابع پیوستن نشانی(base: نشانی وب، ref: رشته): نشانی وب.. و . در مسیر حل میشوند. ارجاعی که فقط ?پرسش یا #بخش باشد نام پروندهی پایه را میاندازد.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-url-Parse.salam