স্ট্রিং এস্কেপিং হলো এমন একটি প্রক্রিয়া যেখানে স্ট্রিং লিটারেলের ভেতরে বিশেষ অর্থবহ অক্ষরগুলোর আগে ব্যাকস্ল্যাশ (বা অন্য চিহ্ন) যোগ করা হয়। কোনো প্রোগ্রামিং ভাষার পার্সার যখন ডাবল-কোটে আবৃত স্ট্রিংয়ের ভেতরে আরেকটি ডাবল-কোট দেখে, তখন সেটিকে স্ট্রিংয়ের শেষ বলে ধরে নেয়। ব্যাকস্ল্যাশ দিয়ে কোটটি এস্কেপ করলে — অর্থাৎ " এর বদলে \" লিখলে — পার্সার সেটিকে একটি আক্ষরিক অক্ষর হিসেবে বিবেচনা করে, ডিলিমিটার হিসেবে নয়। স্ট্রিং লিটারেল ব্যবহার করে এমন প্রতিটি ভাষারই এস্কেপ নিয়ম রয়েছে, যদিও নির্দিষ্ট সিকোয়েন্সগুলো আলাদা হতে পারে।
সবচেয়ে প্রচলিত এস্কেপ সিকোয়েন্সগুলো হোয়াইটস্পেস ও কন্ট্রোল ক্যারেক্টারের সাথে সম্পর্কিত যেগুলো সরাসরি সোর্স কোডে লেখা যায় না। নিউলাইন হয় \n, ট্যাব হয় \t, এবং আক্ষরিক ব্যাকস্ল্যাশ হয় \\। এই নিয়মগুলো C প্রোগ্রামিং ভাষা (ISO/IEC 9899) থেকে এসেছে এবং JavaScript (ECMA-262), Python, Java, Go ও Rust গ্রহণ করেছে। JSON (RFC 8259) একই সিনট্যাক্স ব্যবহার করে তবে কম সংখ্যক সিকোয়েন্স সমর্থন করে।
আনএস্কেপিং (কখনো কখনো "ডি-এস্কেপিং" বলা হয়) হলো বিপরীত প্রক্রিয়া: এস্কেপ সিকোয়েন্সগুলোকে তাদের মূল অক্ষরে রূপান্তর করা। লগ ফাইল পড়া, API রেসপন্স পার্স করা বা ডাবল-এস্কেপ করা ডেটা ডিবাগ করার সময় এটি সাধারণ কাজ। হাতে করলে দুটো অপারেশনই ক্লান্তিকর ও ভুলপ্রবণ, তাই মাল্টি-লাইন স্ট্রিং, এম্বেড করা কোট বা Unicode ক্যারেক্টার নিয়ে কাজ করার সময় ডেভেলপাররা এস্কেপ/আনএস্কেপ টুলের সাহায্য নেন।
অনলাইন স্ট্রিং এস্কেপ টুল কেন ব্যবহার করবেন?
হাতে ব্যাকস্ল্যাশ যোগ বা বাদ দেওয়া একঘেয়ে এবং সহজেই ভুল হয়, বিশেষ করে নেস্টেড কোট বা মাল্টি-লাইন ইনপুটের ক্ষেত্রে। ব্রাউজার-ভিত্তিক স্ট্রিং এস্কেপ টুল REPL সেটআপ বা স্ক্রিপ্ট না লিখেই তাৎক্ষণিক ফলাফল দেয়।
⚡
তাৎক্ষণিক রূপান্তর
টেক্সট পেস্ট করুন এবং সাথে সাথে এস্কেপ বা আনএস্কেপ ফলাফল পান। টার্মিনাল খুলতে, REPL শুরু করতে বা এককালীন স্ক্রিপ্ট লিখতে হবে না।
🔀
ফরম্যাটের মধ্যে পরিবর্তন
JavaScript, Python এবং JSON এস্কেপিং মোডের মধ্যে টগল করুন। প্রতিটি ভাষা সিঙ্গেল কোট, Unicode ও কন্ট্রোল ক্যারেক্টার আলাদাভাবে পরিচালনা করে — টুলটি স্বয়ংক্রিয়ভাবে সঠিক নিয়ম প্রয়োগ করে।
🔒
গোপনীয়তা নিশ্চিত
সব এস্কেপিং ও আনএস্কেপিং আপনার ব্রাউজারে JavaScript দিয়ে হয়। আপনার স্ট্রিং কখনো সার্ভারে পাঠানো হয় না, যা API কী, টোকেন বা ব্যবহারকারীর ডেটা নিয়ে কাজ করার সময় গুরুত্বপূর্ণ।
📋
লগইন বা ইনস্টল প্রয়োজন নেই
পেজ খুলুন এবং পেস্ট শুরু করুন। কোনো অ্যাকাউন্ট তৈরি করতে হবে না, কোনো এক্সটেনশন ইনস্টল করতে হবে না এবং কোনো কুকি কনসেন্ট ওয়াল টুলটি আটকাবে না।
স্ট্রিং এস্কেপের ব্যবহারের ক্ষেত্র
ফ্রন্টএন্ড ডেভেলপমেন্ট
HTML অ্যাট্রিবিউট, ইনলাইন স্ক্রিপ্ট বা টেমপ্লেট লিটারেলে ইনজেক্ট করার আগে ব্যবহারকারী-তৈরি কনটেন্ট এস্কেপ করুন। আনএস্কেপড কোট বা অ্যাঙ্গেল ব্র্যাকেট থেকে ভাঙা মার্কআপ ও XSS ভেক্টর প্রতিরোধ করে।
ব্যাকএন্ড API ইন্টিগ্রেশন
নিউলাইন, ট্যাব বা কোট ধারণকারী এম্বেড করা স্ট্রিং সহ JSON রিকোয়েস্ট বডি তৈরি করুন। সঠিক এস্কেপিং ত্রুটিপূর্ণ JSON প্রতিরোধ করে যা গ্রহণকারী API থেকে 400 এরর সৃষ্টি করতে পারে।
DevOps এবং কনফিগারেশন
JSON কনফিগ ফাইল, YAML হেরেডক বা এনভায়রনমেন্ট ভেরিয়েবলের জন্য এস্কেপড স্ট্রিং লিখুন। Dockerfile ENV বা Kubernetes ConfigMap-এ একটি ভুল ব্যাকস্ল্যাশ ডিপ্লয়মেন্ট ভেঙে দিতে পারে।
QA এবং টেস্ট ডেটা
এম্বেড করা কন্ট্রোল ক্যারেক্টার, Unicode সিকোয়েন্স ও নেস্টেড কোট সহ টেস্ট স্ট্রিং তৈরি করুন। এই এজ-কেস স্ট্রিংগুলো যাচাই করতে দরকার যে পার্সার ও সিরিয়ালাইজারগুলো বিশেষ অক্ষর সঠিকভাবে পরিচালনা করছে।
ডেটা ইঞ্জিনিয়ারিং
CSV এক্সপোর্ট, লগ অ্যাগ্রিগেটর বা ডেটাবেস ডাম্প থেকে ডাবল-এস্কেপড ডেটা পরিষ্কার করুন। একাধিক সিরিয়ালাইজেশন স্তরের মধ্য দিয়ে যাওয়া ফিল্ডগুলোতে প্রায়ই অতিরিক্ত ব্যাকস্ল্যাশ জমা হয় যা সরানো দরকার।
শেখা এবং ডিবাগিং
বিভিন্ন ভাষা একই স্ট্রিং কীভাবে উপস্থাপন করে তা পরীক্ষা করুন। কোনো ভাষায় নতুন শিক্ষার্থী ও ডেভেলপাররা JavaScript, Python ও JSON এস্কেপিং পাশাপাশি তুলনা করে পার্থক্যগুলো বুঝতে পারবেন।
এস্কেপ সিকোয়েন্স রেফারেন্স
নিচের টেবিলে সাধারণ এস্কেপ সিকোয়েন্স এবং সেগুলো JavaScript, Python ও JSON-এ সমর্থিত কি না তা দেওয়া আছে। তিনটি ভাষা মূল সেট (নিউলাইন, ট্যাব, ব্যাকস্ল্যাশ, ডাবল কোট) শেয়ার করে, তবে সিঙ্গেল কোট, হেক্স এস্কেপ ও বিস্তারিত Unicode নোটেশনে ভিন্নতা রয়েছে।
সিকোয়েন্স
অর্থ
JavaScript
Python
JSON
\n
Newline (LF)
Yes
Yes
Yes
\r
Carriage return
Yes
Yes
Yes
\t
Tab
Yes
Yes
Yes
\\
Backslash
Yes
Yes
Yes
\"
Double quote
Yes
Yes
Yes
\'
Single quote
Yes
Yes
No
\b
Backspace
Yes
Yes
Yes
\f
Form feed
Yes
Yes
Yes
\v
Vertical tab
Yes
Yes
No
\0
Null character
Yes
Yes
No
\xNN
Hex byte
Yes
Yes
No
\uNNNN
Unicode (BMP)
Yes
Yes
Yes
\u{N..}
Unicode (full)
Yes
No
No
JavaScript বনাম Python বনাম JSON এস্কেপিং
এই তিনটি ফরম্যাট একই ব্যাকস্ল্যাশ-ভিত্তিক সিনট্যাক্স শেয়ার করলেও কোন সিকোয়েন্সগুলো বৈধ এবং এজ কেসগুলো কীভাবে পরিচালনা করে তাতে পার্থক্য রয়েছে। ভুল মোড বেছে নিলে এমন আউটপুট তৈরি হয় যা দেখতে সঠিক মনে হলেও পার্স করার সময় ব্যর্থ হয়।
JavaScript
\x হেক্স এস্কেপ, পূর্ণ Unicode রেঞ্জের জন্য \u{...} (BMP-এর বাইরে), ভার্টিকেল ট্যাবের জন্য \v এবং নালের জন্য \0 সমর্থন করে। সিঙ্গেল ও ডাবল উভয় কোট এস্কেপ করা যায়। টেমপ্লেট লিটারেল (ব্যাকটিক) বেশিরভাগ এস্কেপিং প্রয়োজনীয়তা এড়িয়ে যায়।
Python
JavaScript-এর মতো একই মূল সিকোয়েন্স, এছাড়াও \x হেক্স এস্কেপ ও নামযুক্ত Unicode ক্যারেক্টারের জন্য \N{name} সমর্থিত। Raw স্ট্রিং (r"...") এস্কেপ প্রক্রিয়াকরণ সম্পূর্ণ নিষ্ক্রিয় করে। সিঙ্গেল ও ডাবল উভয় কোট এস্কেপযোগ্য।
JSON
সবচেয়ে সীমাবদ্ধ ফরম্যাট। শুধুমাত্র \" (ডাবল কোট), \\, \/, \n, \r, \t, \b, \f এবং \uNNNN বৈধ। সিঙ্গেল-কোট এস্কেপিং নেই (JSON স্ট্রিং সবসময় ডাবল কোট ব্যবহার করে)। কোনো হেক্স এস্কেপ নেই, \v নেই, \0 নেই। যেকোনো কন্ট্রোল ক্যারেক্টার (U+0000 থেকে U+001F) অবশ্যই \uNNNN নোটেশন ব্যবহার করতে হবে।
কোড উদাহরণ
JavaScript, Python, Go এবং কমান্ড লাইনে স্ট্রিং এস্কেপ ও আনএস্কেপ করার উদাহরণ।
JavaScript
// Escape a string with special characters
const raw = 'Line 1\nLine 2\tTabbed "quoted"';
const escaped = JSON.stringify(raw);
// → '"Line 1\\nLine 2\\tTabbed \\"quoted\\""'
// Unescape a JSON string value
const input = '"Hello\\nWorld"';
const unescaped = JSON.parse(input);
// → "Hello\nWorld" (actual newline character)
// Template literals don't need quote escaping
const tpl = `She said "hello"`;
// → 'She said "hello"' — no backslashes needed
// Escape for use inside a RegExp
const query = 'price: $5.00 (USD)';
const safe = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
// → "price: \\$5\\.00 \\(USD\\)"
Python
# Escape with repr() — shows escape sequences
raw = "Line 1\nLine 2\t'quoted'"
print(repr(raw))
# → "Line 1\nLine 2\t'quoted'"
# Raw strings skip escape processing
path = r"C:\Users\name\Documents"
print(path)
# → C:\Users\name\Documents (backslashes kept literal)
# JSON escaping with json module
import json
data = 'He said "hello\nworld"'
escaped = json.dumps(data)
# → '"He said \\"hello\\nworld\\""'
# Unicode escaping
text = "Caf\u00e9" # → "Café"
print(text.encode('unicode_escape').decode())
# → "Caf\\xe9"
# Use $'...' syntax for escape sequences in bash
echo $'Line 1\nLine 2\tTabbed'
# → Line 1
# Line 2 Tabbed
# printf interprets escape sequences
printf 'Path: C:\\Users\\name\n'
# → Path: C:\Users\name
# Use jq to escape a string for JSON
echo 'He said "hello"' | jq -Rs .
# → "He said \"hello\"\n"
# Unescape JSON string with jq
echo '"Line 1\\nLine 2"' | jq -r .
# → Line 1
# Line 2
সচরাচর জিজ্ঞাসিত প্রশ্ন
এস্কেপিং এবং এনকোডিংয়ের মধ্যে পার্থক্য কী?
এস্কেপিং স্ট্রিং লিটারেলের মধ্যে বিশেষ অক্ষরগুলোর আগে ব্যাকস্ল্যাশ যোগ করে যাতে ভাষার পার্সার সেগুলোকে সিনট্যাক্স নয়, ডেটা হিসেবে বিবেচনা করে। এনকোডিং পুরো স্ট্রিংটিকে ভিন্ন একটি উপস্থাপনায় রূপান্তর করে — উদাহরণস্বরূপ, Base64 এনকোডিং বাইনারিকে ASCII টেক্সটে রূপান্তর করে এবং URL এনকোডিং অনিরাপদ অক্ষরগুলোকে পার্সেন্ট-হেক্স সিকোয়েন্স দিয়ে প্রতিস্থাপন করে। এস্কেপিং পাঠযোগ্যতা বজায় রাখে; এনকোডিং ফরম্যাট সম্পূর্ণ পরিবর্তন করে।
আমার স্ট্রিংয়ে একক ব্যাকস্ল্যাশের বদলে দ্বিগুণ ব্যাকস্ল্যাশ (\\\\) কেন দেখাচ্ছে?
দ্বিগুণ ব্যাকস্ল্যাশ দেখা দেয় যখন একটি স্ট্রিং দুইবার এস্কেপ করা হয়। ডেটা একাধিক সিরিয়ালাইজেশন স্তরের মধ্য দিয়ে যাওয়ার সময় এটি প্রায়ই ঘটে — যেমন অন্য JSON স্ট্রিংয়ের ভেতরে সংরক্ষিত একটি JSON মান, অথবা ফাইলে লেখার আগে JSON-এনকোড করা একটি লগ লাইন। ঠিক করতে, মূল কনটেন্টে পৌঁছানো পর্যন্ত একবারে একটি স্তর আনএস্কেপ করুন।
JavaScript-এ JSON-এর জন্য স্ট্রিং কীভাবে এস্কেপ করব?
JSON.stringify() ব্যবহার করুন। এটি স্ট্রিংটিকে ডাবল কোটে মুড়িয়ে JSON-এর প্রয়োজনীয় সব অক্ষর এস্কেপ করে: ব্যাকস্ল্যাশ, ডাবল কোট, নিউলাইন, ট্যাব এবং U+0020-এর নিচের কন্ট্রোল ক্যারেক্টার। শুধু আবৃত কোট ছাড়া ভেতরের কনটেন্ট চাইলে JSON.stringify(str).slice(1, -1) ব্যবহার করুন।
JSON স্ট্রিংয়ে সিঙ্গেল কোট থাকতে পারে কি?
না। JSON স্পেসিফিকেশন (RFC 8259) অনুযায়ী সব স্ট্রিং অবশ্যই ডাবল কোট দিয়ে আবৃত হতে হবে। JSON-এ সিঙ্গেল কোট বৈধ স্ট্রিং ডিলিমিটার নয়। কিছু নমনীয় পার্সার সেগুলো গ্রহণ করলেও যেকোনো স্ট্যান্ডার্ড-সম্মত JSON পার্সার সিঙ্গেল কোটে আবৃত স্ট্রিং প্রত্যাখ্যান করবে। আপনার স্ট্রিংয়ে সিঙ্গেল কোট অক্ষর থাকলে ডাবল-কোটে আবৃত JSON-এর ভেতরে সেটি যেমন আছে তেমনই রাখা যায় — কোনো এস্কেপিং দরকার নেই।
Python-এ raw স্ট্রিং কী?
Raw স্ট্রিং (r দিয়ে উপসর্গযুক্ত, যেমন r"C:\Users\name") Python ইন্টারপ্রেটারকে ব্যাকস্ল্যাশগুলোকে এস্কেপ মার্কার নয়, আক্ষরিক অক্ষর হিসেবে বিবেচনা করতে বলে। Windows ফাইল পাথ, রেগুলার এক্সপ্রেশন এবং ব্যাকস্ল্যাশ সংরক্ষণ করতে হবে এমন যেকোনো স্ট্রিংয়ের জন্য এটি উপকারী। লক্ষ্য করুন যে raw স্ট্রিং বিজোড় সংখ্যার ব্যাকস্ল্যাশ দিয়ে শেষ হতে পারে না, কারণ ট্রেইলিং ব্যাকস্ল্যাশ ক্লোজিং কোটকে এস্কেপ করে ফেলবে।
JavaScript দুটি Unicode এস্কেপ ফর্ম সমর্থন করে। \uNNNN সিনট্যাক্স Basic Multilingual Plane (U+0000 থেকে U+FFFF)-এর অক্ষর পরিচালনা করে, যেমন 'e with acute'-এর জন্য \u00e9। BMP-এর বাইরের অক্ষরের জন্য (ইমোজি, বিরল স্ক্রিপ্ট) সর্বোচ্চ ছয়টি হেক্স ডিজিট সহ \u{NNNNN} ব্যবহার করুন — যেমন grinning face ইমোজির জন্য \u{1F600}। \u{'} ফর্মটি ES2015-এ প্রবর্তিত হয়েছিল।
স্ট্রিং এস্কেপিং কি নিরাপত্তার (XSS, SQL injection) সাথে সম্পর্কিত?
ভাষা-স্তরের এস্কেপিং ও নিরাপত্তা এস্কেপিং ভিন্ন উদ্দেশ্যে কাজ করে, তবে মূল ধারণা একই: বিশেষ অক্ষরগুলোকে কোড হিসেবে ব্যাখ্যা হওয়া থেকে রোধ করা। XSS প্রতিরোধে HTML এন্টিটি (<, >, &) এস্কেপ করা হয়। SQL injection-এর জন্য হাতে এস্কেপ করার বদলে প্যারামিটারাইজড কোয়েরি ব্যবহার করা হয়। এই টুলটি ভাষা-স্তরের স্ট্রিং এস্কেপিং (ব্যাকস্ল্যাশ সিকোয়েন্স) পরিচালনা করে, HTML বা SQL এস্কেপিং নয়।