UltKit

URL انکوڈ اور ڈیکوڈ

متن کو URL میں ڈالنے کے قابل بنائیں، یا %20 جیسے سیکوینسز کو دوبارہ پڑھنے کے قابل حروف میں بدلیں۔ یہ ٹول آپ کے براؤزر کے اپنے encodeURIComponent، encodeURI اور decodeURIComponent استعمال کرتا ہے، کوئری پیرامیٹرز کو ٹیبل میں دکھاتا ہے اور کسی سرور کو کچھ نہیں بھیجتا۔

موڈ

0 حروف · 0 الفاظ · 0 سطریں

0 حروف · 0 الفاظ · 0 سطریں

یہ مکمل طور پر اسی براؤزر ٹیب میں چلتا ہے۔ آپ کا متن کبھی اپ لوڈ یا محفوظ نہیں کیا جاتا۔

ہر فنکشن کیا ایسکیپ کرتا ہے

براؤزر کے اپنے فنکشنز سے حساب کیا گیا۔ encodeURIComponent حروف، ہندسے اور یہ نشانات نہیں چھیڑتا: ! ' ( ) * - . _ ~

حرفencodeURIComponentencodeURI
(اسپیس)%20%20
!!!
"%22%22
#%23#
$%24$
%%25%25
&%26&
'''
(((
)))
***
+%2B+
,%2C,
/%2F/
:%3A:
;%3B;
=%3D=
?%3F?
@%40@
[%5B%5B
]%5D%5D
{%7B%7B
}%7D%7D
|%7C%7C
\%5C%5C
^%5E%5E
`%60%60
<%3C%3C
>%3E%3E
~~~
---
___
...
é%C3%A9%C3%A9
€%E2%82%AC%E2%82%AC
😀%F0%9F%98%80%F0%9F%98%80

پرسنٹ انکوڈنگ اور RFC 3986 کے مخصوص (reserved) حروف

URL میں ASCII حروف کا صرف ایک محدود سیٹ استعمال ہو سکتا ہے۔ RFC 3986، جو 2005 میں URI کی ساخت کا معیار بنا، انہیں دو گروہوں میں تقسیم کرتا ہے۔ غیر محفوظ شدہ (unreserved) حروف، یعنی A–Z، a–z، 0–9 اور چار علامات - . _ ~، کو کبھی اینکوڈ کرنے کی ضرورت نہیں پڑتی۔ محفوظ شدہ (reserved) حروف کا ایک خاص کام ہوتا ہے: عمومی حد بندی کرنے والے حروف : / ? # [ ] @ اسکیم، ہوسٹ، پاتھ، کوئری اور فریگمنٹ کو الگ کرتے ہیں، جبکہ ذیلی حد بندی والے حروف ! $ & ' ( ) * + , ; = ان کے اندر موجود اجزا کو الگ کرتے ہیں، جیسے کوئری اسٹرنگ میں & اور = کرتے ہیں۔ باقی ہر حرف، اور وہ محفوظ شدہ حرف جو عام ڈیٹا کے طور پر استعمال ہو، پرسنٹ اینکوڈ ہونا لازمی ہے۔

پرسنٹ اینکوڈنگ ایک بائٹ کو % اور اس کے بعد دو ہیکساڈیسیمل ہندسوں کی شکل میں لکھتی ہے۔ متن پہلے UTF-8 میں بدلا جاتا ہے، اس لیے اسپیس %20 بن جاتی ہے، é (دو بائٹس) %C3%A9 بن جاتا ہے اور ایک ایموجی چار %XX گروہوں میں بدل جاتا ہے۔ اسی وجہ سے "café & bar" کی تلاش لنک میں caf%C3%A9%20%26%20bar بن کر آتی ہے: & کو اینکوڈ کیا جاتا ہے تاکہ سرور اسے نئے پیرامیٹر کا آغاز نہ سمجھے۔

encodeURIComponent، encodeURI اور ڈیکوڈنگ

encodeURIComponent کسی ایک حصے کے لیے درست انتخاب ہے، جیسے کوئری ویلیو، پاتھ سیگمنٹ یا پیرامیٹر کے طور پر بھیجا گیا ری ڈائریکٹ URL۔ یہ غیر محفوظ شدہ حروف اور ! ' ( ) * کے سوا سب کچھ اسکیپ کر دیتا ہے؛ ان پانچ کو JavaScript تاریخی وجوہات کی بنا پر چھوڑ دیتا ہے۔ encodeURI (پورا URL) فرض کرتا ہے کہ اس کا ان پٹ پہلے سے مکمل پتہ ہے اور محفوظ شدہ حروف کو جوں کا توں رکھتا ہے، لہٰذا https://example.com/a b?q=1 میں صرف اسپیس اینکوڈ ہوتی ہے۔ پیرامیٹر کی ویلیو پر encodeURI استعمال کرنا ایک عام غلطی ہے: ویلیو کے اندر موجود & یا # جوں کے توں رہ کر URL کو توڑ دیتے ہیں۔

ڈی کوڈ دونوں میں سے کسی بھی فنکشن کا الٹ کرتا ہے۔ GET کے ساتھ جمع ہونے والے HTML فارم پرانا application/x-www-form-urlencoded فارمیٹ استعمال کرتے ہیں، جس میں اسپیس %20 کے بجائے + سے لکھی جاتی ہے؛ ایسے متن کے لیے Treat + as a space کو ٹک رکھیں، اور جب پلس کا نشان اصل معنی رکھتا ہو، جیسے فون نمبر میں، تو ٹک ہٹا دیں۔ اگر ان پٹ میں ایسا % ہو جس کے بعد دو ہیکس ہندسے نہ ہوں، یا ایسے بائٹس ہوں جو درست UTF-8 نہ ہوں، تو ڈی کوڈنگ اندازہ لگانے کے بجائے واضح پیغام کے ساتھ ناکام ہو جاتی ہے۔ جب متن میں کوئری اسٹرنگ ہو تو اس کے پیرامیٹر ٹول کے نیچے ایک جدول میں ڈی کوڈ شدہ شکل میں نظر آتے ہیں۔ URL میں بائنری ڈیٹا کے لیے عام متبادل Base64url ہے۔

اکثر پوچھے جانے والے سوالات

URL میں اسپیس %20 ہونی چاہیے یا جمع کا نشان (+)؟
پاتھ میں اور RFC 3986 کے مطابق اسپیس %20 ہے۔ + والی شکل صرف ان کوئری اسٹرنگز میں اسپیس کا مطلب دیتی ہے جو HTML فارمز کے طریقے سے اینکوڈ ہوئی ہوں، اس لیے %20 ہر جگہ محفوظ انتخاب ہے۔
میرے URL میں %2520 کیوں آ گیا؟
اسے دو بار اینکوڈ کیا گیا ہے۔ پہلے مرحلے میں اسپیس %20 بنی، اور دوسرے میں خود % کو %25 میں اینکوڈ کر دیا گیا۔ اضافی تہہ ہٹانے کے لیے ایک بار ڈی کوڈ کریں، اور اپنے کوڈ میں ویلیوز کو صرف ایک ہی جگہ اینکوڈ کریں۔
کن حروف کو کبھی پرسنٹ انکوڈنگ کی ضرورت نہیں ہوتی؟
RFC 3986 کا غیر محفوظ شدہ سیٹ: A سے Z تک بڑے اور چھوٹے دونوں طرح کے حروف، 0 سے 9 تک ہندسے، اور ہائفن، ڈاٹ، انڈر اسکور اور ٹلڈے۔
کیا URL میں انگریزی کے علاوہ دیگر حروف انکوڈنگ کے بغیر لکھے جا سکتے ہیں؟
براؤزر انہیں دکھاتے ہیں، لیکن نیٹ ورک پر پاتھ یا کوئری کا ہر غیر ASCII حرف پرسنٹ اینکوڈ شدہ UTF-8 کی شکل میں بھیجا جاتا ہے۔ ڈومین نام ایک الگ نظام، Punycode، استعمال کرتے ہیں جو انہیں xn-- لیبلز میں بدل دیتا ہے۔
ڈیکوڈنگ میں خراب سیکوینس (malformed) کا پیغام کیوں آتا ہے؟
متن میں ایسا % موجود ہے جس کے بعد دو ہیکساڈیسیمل ہندسے نہیں ہیں، جیسے لفظی "100%"، یا بائٹس کی ڈی کوڈنگ غلط UTF-8 بنتی ہے۔ ڈی کوڈ کرنے سے پہلے الگ تھلگ % کو %25 میں اینکوڈ کریں۔