URL انکوڈ کریں
ٹیکسٹ کو پرسنٹ انکوڈ کریں تاکہ وہ URL میں صحیح سلامت رہے۔ تین مختلف کاموں کے لیے تین مختلف انکوڈنگز ہیں، اور غلط کا انتخاب ہی ویلیوز کو خاموشی سے توڑتا ہے — اس لیے صفحہ آپ کو بتاتا ہے کہ آپ کو کون سی چاہیے۔
- کبھی محفوظ نہیں کی جاتی
- نہ قطار، نہ انتظار
- نہ سائن اپ، نہ واٹر مارک
انکوڈ شدہ یہاں نظر آئے گا۔
یہ کیسے کام کرتا ہے
اپنا ٹیکسٹ پیسٹ کریں
کوئی بھی ٹیکسٹ، کسی بھی زبان میں۔ یہ UTF-8 کے طور پر انکوڈ ہوتا ہے، جس کی ہر جدید سرور توقع رکھتا ہے۔
کام چنیں
کوئری اسٹرنگ میں جانے والی ایک ویلیو، مکمل جوڑا ہوا URL، یا فارم سبمیشن۔ فرق اہم ہے اور ہر ایک کی وضاحت دی گئی ہے۔
نتیجہ کاپی کریں
اگر ایک ساتھ پوری فہرست کرنی ہو تو لائن بہ لائن انکوڈ کریں۔
تین درست جواب، اور ایک بٹن کیوں غلط ہے
پرسنٹ انکوڈنگ کسی حرف کو % اور ہیکس میں اس کی بائٹ ویلیو سے بدل دیتی ہے۔ اسپیسیفکیشن حروف کو تین گروپوں میں تقسیم کرتی ہے، اور اس بارے میں ساری الجھن اسی سے پیدا ہوتی ہے۔ Unreserved حروف — حروفِ تہجی، ہندسے، ہائفن، فل اسٹاپ، انڈر اسکور اور ٹلڈ — کو کبھی انکوڈنگ کی ضرورت نہیں ہوتی۔ Reserved حروف — وہ سلیش، سوالیہ نشان، ایمپرسینڈ، برابر کے نشان اور کولن جو URL کو اس کی ساخت دیتے ہیں — *جب ڈیٹا ہوں* تو انکوڈ ہونے چاہییں اور *جب ساخت ہوں* تو نہیں۔ باقی سب کچھ ہمیشہ انکوڈ ہوتا ہے۔
اسی لیے کوئی ایک درست جواب نہیں۔ پورا URL انکوڈ کرتے ہوئے سلیش اور سوالیہ نشان کو چھوڑنا پڑتا ہے، ورنہ ایڈریس، ایڈریس نہیں رہتا۔ کوئری پیرامیٹر میں ڈالنے کے لیے ویلیو انکوڈ کرتے ہوئے ایمپرسینڈ اور برابر کے نشان ایسکیپ کرنا ضروری ہے، ورنہ ان میں سے کوئی ایک رکھنے والی ویلیو دو پیرامیٹرز میں بٹ جاتی ہے۔ پاتھ سیگمنٹ انکوڈ کرتے ہوئے سلیش ایسکیپ کرنا ضروری ہے، ورنہ نام میں سلیش والی فائل دو ڈائریکٹریز بن جاتی ہے۔ ایک اکیلا Encode بٹن ان میں سے ایک چنتا ہے اور باقی دو تہائی بار غلط ہوتا ہے — عموماً خاموشی سے، اور عموماً ایسے کہ صرف غیر معمولی ان پٹ پر ظاہر ہو۔
اسپیس وہ حرف ہے جس کے ساتھ سب سے زیادہ تاریخ جڑی ہے۔ URL میں یہ %20 ہے۔ جمع کیے گئے HTML فارم میں یہ + ہے، جو ایک الگ اور پرانی انکوڈنگ ہے اور اس لیے باقی ہے کہ فارمز 1994 سے اسی طرح کام کرتے آئے ہیں۔ دونوں اپنے اپنے سیاق میں درست ہیں اور دوسرے میں غلط، اسی لیے کوئری اسٹرنگ میں پلس کا نشان اس طرح مبہم ہے کہ انکوڈنگ کی طرف کتنی ہی احتیاط اسے ٹھیک نہیں کر سکتی۔
غیر ASCII ٹیکسٹ پہلے UTF-8 میں اور پھر بائٹ بہ بائٹ انکوڈ ہوتا ہے، اس لیے اعراب والا ایک حرف دو پرسنٹ سیکوئنسز بن جاتا ہے اور ایک ایموجی چار۔ ڈبل انکوڈنگ مشہور بگ ہے: پہلے سے انکوڈ شدہ چیز کو دوبارہ انکوڈ کرنے سے ہر % بدل کر %25 بن جاتا ہے، یوں %20 بن جاتا ہے %2520 اور دوسری طرف لفظی پرسنٹ کا نشان پہنچتا ہے۔ اگر کوئی URL %25 سے بھرا ہو تو وہ ضرورت سے ایک انکوڈر زیادہ سے گزرا ہے۔
جب آپ کو کچھ اور چاہیے
کوڈ میں زبان کا اپنا فنکشن استعمال کریں اور اسے اتنی ہی سوچ سمجھ کر چنیں جتنا یہ صفحہ آپ سے چنواتا ہے۔ JavaScript میں پورے ایڈریس کے لیے encodeURI اور ویلیوز کے لیے encodeURIComponent ہے؛ Python میں urllib.parse.quote ہے جس کا safe آرگیومنٹ ڈیفالٹ طور پر سلیش کو نہیں چھیڑتا؛ PHP میں rawurlencode اور urlencode الگ ہیں، جو بالکل اوپر والے اسپیس بمقابلہ پلس کے سوال پر مختلف ہیں۔ اس سے بھی بہتر یہ ہے کہ URLs کو اسٹرنگز جوڑ کر نہیں بلکہ URL ٹائپ سے بنائیں، اور یہ سوال ہی ختم ہو جاتا ہے۔
کمانڈ لائن پر jq -rR @uri محفوظ طریقے سے انکوڈ کرتا ہے اور فہرست بھی سنبھال لیتا ہے، اور curl --data-urlencode درست طریقے سے انکوڈ شدہ پیرامیٹر بناتا ہے بغیر اس کے کہ آپ کو سوچنا پڑے کہ آپ تینوں میں سے کس صورت میں ہیں — اور یہی وہ واحد جگہ ہے جہاں یہ واقعی آسان ہے۔
اکثر پوچھے جانے والے سوالات
تینوں میں سے کون سا استعمال کروں؟
تقریباً ہمیشہ “ایک ویلیو”۔ اسے تب استعمال کریں جب آپ کوئی ایک ویلیو انکوڈ کر رہے ہوں جو کوئری اسٹرنگ یا پاتھ سیگمنٹ میں جانے والی ہو — سرچ ٹرم، ای میل ایڈریس، ری ڈائریکٹ کی منزل۔ تینوں میں سے صرف یہی &، =، ? اور / کو ایسکیپ کرتا ہے، اور یہی چیز آپ کی ویلیو کو اپنے پیرامیٹر سے نکل کر دو پیرامیٹرز بننے سے روکتی ہے۔ “پورا URL” صرف تب استعمال کریں جب آپ کے پاس پہلے سے مکمل URL ہو اور آپ صرف اس کے غیر محفوظ حروف صاف کرنا چاہتے ہوں؛ یہ جان بوجھ کر ساخت والے حروف کو نہیں چھیڑتا تاکہ URL، URL ہی رہے۔ “فارم ڈیٹا” تب استعمال کریں جب آپ application/x-www-form-urlencoded باڈی بنا رہے ہوں، جہاں اسپیس %20 کے بجائے + ہوتی ہے۔
میرے “&” نے URL کیوں توڑ دیا؟
کیونکہ وہ انکوڈ نہیں ہوا تھا، اور & ہی وہ نشان ہے جس سے کوئری اسٹرنگ ایک پیرامیٹر کو اگلے سے الگ کرتی ہے۔ ?company= کے ساتھ بغیر انکوڈ کیے جوڑی گئی ویلیو "Smith & Sons" سرور پر company=Smith اور "Sons" نام کے ایک دوسرے، خالی پیرامیٹر کے طور پر پہنچتی ہے۔ یہ URL کا سب سے عام بگ ہے، اور “ایک ویلیو” والی انکوڈنگ اس کا حل ہے — یہ & کو %26 میں بدل دیتی ہے تاکہ ویلیو ایک ہی ویلیو رہے۔
میرا “+” اسپیس کیوں بن گیا؟
کیونکہ کوئری اسٹرنگ میں + کا مطلب اسپیس ہے — یہ HTML فارمز سے ورثے میں ملا اصول ہے جسے آج تک کوئی ہٹا نہیں سکا۔ اس لیے آپ کے ڈیٹا میں لفظی پلس، کسی فون نمبر یا Base64 اسٹرنگ میں، وصول کرنے والا سرور اسپیس کے طور پر پڑھتا ہے۔ “ایک ویلیو” والی انکوڈنگ اسے %2B میں ایسکیپ کر دیتی ہے، جو صحیح سلامت پہنچتا ہے۔
کیا یہ دوسری زبانوں اور ایموجی کو سنبھالتا ہے؟
جی ہاں۔ ٹیکسٹ پہلے UTF-8 میں بدلا جاتا ہے اور پھر بائٹ بہ بائٹ پرسنٹ انکوڈ ہوتا ہے، جو RFC 3986 کا تقاضا ہے اور جس کی ہر جدید سرور توقع رکھتا ہے۔ جاپانی، عربی، اعراب والی لاطینی اور ایموجی سب بالکل ویسے ہی واپس آتے ہیں۔
جب دوسرے ٹولز ! ' ( ) * کو چھوڑ دیتے ہیں تو یہاں یہ انکوڈ کیوں ہوتے ہیں؟
کیونکہ براؤزر کا بلٹ اِن encodeURIComponent ان پانچوں کو نہیں چھیڑتا، جبکہ RFC 3986 انہیں reserved قرار دیتا ہے۔ کچھ سرورز اور فریم ورکس انہیں ساخت کا حصہ سمجھتے ہیں، اس لیے ان پر مشتمل ویلیو غلط پڑھی جا سکتی ہے۔ انہیں انکوڈ کرنا بے ضرر ہے — یہ ہر جگہ ڈیکوڈ ہو کر بالکل ویسے ہی واپس آتے ہیں — اور اس سے ایک نایاب اور مشکل سے پکڑ میں آنے والے بگ کی پوری قسم ختم ہو جاتی ہے۔ محتاط امپلیمینٹیشنز یہی کرتی ہیں۔
کیا میرا ٹیکسٹ کہیں محفوظ کیا جاتا ہے؟
نہیں۔ کچھ بھی محفوظ نہیں کیا جاتا اور کوئی ریکوئسٹ نہیں کی جاتی۔ صفحہ لوڈ ہونے کے بعد آپ انٹرنیٹ بند کر سکتے ہیں اور یہ کام کرتا رہتا ہے۔
جاننا مفید ہے: تین مختلف درست جواب ہیں اور صفحہ آپ سے ان میں سے ایک چنواتا ہے، کیونکہ عام ایک Encode بٹن دو تہائی بار غلط ہوتا ہے۔ پورا URL، کوئری پیرامیٹر اور پاتھ سیگمنٹ انکوڈ کرنے میں مختلف حروف ایسکیپ ہوتے ہیں؛ غلط کا استعمال خاموشی سے سلیش، پلس یا ایمپرسینڈ توڑ دیتا ہے۔
یہ ٹول اپنی ویب سائٹ پر لگائیں
کسی بھی بلاگ، کلاس پیج یا ہیلپ آرٹیکل کے لیے مفت۔ ایک اسنیپٹ پیسٹ کریں اور آپ کے وزیٹرز اسے سیدھا آپ کے صفحے پر استعمال کر سکیں گے۔