اسکیپ رشته فرآیندی است که در آن یک بکاسلش (یا نشانگر دیگری) پیش از کاراکترهایی قرار میگیرد که در داخل یک رشته لیترال معنای خاصی دارند. پارسر با دیدن نقلقول دوگانه درون رشته، آن را پایان رشته میپندارد. اسکیپ نقلقول با بکاسلش — نوشتن \" بهجای " — به پارسر میگوید که آن را بهعنوان یک کاراکتر تحتاللفظی نه یک جداکننده در نظر بگیرد. هر زبانی که از رشته لیترال استفاده میکند قوانین اسکیپ دارد، هرچند دنبالههای دقیق متفاوت هستند.
رایجترین دنبالههای اسکیپ به کاراکترهای فضای سفید و کنترلی نگاشت میشوند که نمیتوانند مستقیماً در کد منبع ظاهر شوند. یک خط جدید به \n تبدیل میشود، یک تب به \t و یک بکاسلش تحتاللفظی به \\. این قراردادها به زبان برنامهنویسی C (ISO/IEC 9899) برمیگردند و توسط JavaScript (ECMA-262)، Python، Java، Go و Rust پذیرفته شدهاند. JSON (RFC 8259) از همین نحو استفاده میکند اما مجموعه کوچکتری از دنبالهها را پشتیبانی میکند.
آناسکیپ (که گاهی «de-escaping» نامیده میشود) عملیات معکوس است: تبدیل دنبالههای اسکیپ به کاراکترهای اصلیشان. این کار هنگام خواندن فایلهای لاگ، پارس کردن پاسخهای API، یا اشکالزدایی دادههایی که دوبار اسکیپ شدهاند رایج است. هر دو عملیات مکانیکی هستند و در صورت انجام دستی مستعد خطا میباشند، به همین دلیل توسعهدهندگان هنگام کار با رشتههای چندخطی، نقلقولهای تودرتو یا کاراکترهای Unicode به ابزار اسکیپ/آناسکیپ روی میآورند.
چرا از ابزار آنلاین اسکیپ رشته استفاده کنیم؟
اضافه یا حذف دستی بکاسلشها خستهکننده است و بهویژه با نقلقولهای تودرتو یا ورودی چندخطی بهآسانی اشتباه میشود. یک ابزار اسکیپ رشته مبتنی بر مرورگر نتایج فوری را بدون نیاز به راهاندازی REPL یا نوشتن اسکریپتهای یکبارمصرف ارائه میدهد.
⚡
تبدیل فوری
متن خود را بچسبانید و نتیجه اسکیپ یا آناسکیپ را فوراً دریافت کنید. نیازی به باز کردن ترمینال، راهاندازی REPL یا نوشتن اسکریپت یکباره نیست.
🔀
جابجایی بین فرمتها
بین حالتهای اسکیپ JavaScript، Python و JSON تغییر دهید. هر زبان با نقلقولهای تکی، Unicode و کاراکترهای کنترلی متفاوت رفتار میکند — ابزار قوانین صحیح را بهطور خودکار اعمال میکند.
🔒
پردازش کاملاً محلی (در مرورگر)
تمام عملیات اسکیپ و آناسکیپ در مرورگر شما با استفاده از JavaScript انجام میشود. رشتههای شما هرگز به سرور ارسال نمیشوند، که این موضوع هنگام کار با کلیدهای API، توکنها یا دادههای کاربری اهمیت دارد.
📋
بدون ورود یا نصب
صفحه را باز کنید و شروع به چسباندن کنید. نه نیازی به ساخت حساب کاربری، نه افزونهای برای نصب، و نه popup کوکی که جلوی کار را بگیرد.
موارد استفاده از اسکیپ رشته
توسعه فرانتاند
محتوای تولیدشده توسط کاربر را پیش از درج در ویژگیهای HTML، اسکریپتهای درونخطی یا template literal ها اسکیپ کنید. از مارکآپ شکسته و بردارهای XSS ناشی از نقلقولها یا براکتهای زاویهای اسکیپنشده جلوگیری میکند.
یکپارچهسازی API بکاند
بدنههای درخواست JSON با رشتههای تعبیهشدهای که شامل خط جدید، تب یا نقلقول هستند بسازید. اسکیپ صحیح در JSON از بدشکلی که باعث خطاهای 400 از API دریافتکننده میشود جلوگیری میکند.
DevOps و پیکربندی
رشتههای اسکیپشده برای فایلهای پیکربندی JSON، heredoc های YAML یا متغیرهای محیطی بنویسید. یک بکاسلش اشتباه در ENV یک Dockerfile یا ConfigMap Kubernetes میتواند یک استقرار را خراب کند.
QA و دادههای آزمایشی
رشتههای آزمایشی با کاراکترهای کنترلی تعبیهشده، دنبالههای Unicode و نقلقولهای تودرتو تولید کنید. این رشتههای موردی خاص برای تأیید اینکه پارسرها و سریالسازها کاراکترهای خاص را بهدرستی مدیریت میکنند لازم هستند.
مهندسی داده
دادههای دوبار اسکیپ شده از صادرات CSV، جمعکنندههای لاگ یا dump های پایگاه داده را پاک کنید. فیلدهایی که از چندین لایه سریالسازی عبور میکنند اغلب بکاسلشهای اضافی تجمیع میکنند که باید حذف شوند.
یادگیری و اشکالزدایی
بررسی کنید که زبانهای مختلف چگونه یک رشته را نمایش میدهند. دانشآموزان و توسعهدهندگانی که با یک زبان آشنا نیستند میتوانند اسکیپ JavaScript، Python و JSON را کنار هم مقایسه کنند تا تفاوتها را درک کنند.
مرجع دنبالههای اسکیپ
جدول زیر دنبالههای اسکیپ رایج و اینکه آیا در JavaScript، Python و JSON پشتیبانی میشوند را فهرست میکند. هر سه زبان مجموعه اصلی (خط جدید، تب، بکاسلش، نقلقول دوگانه) را به اشتراک میگذارند، اما در نقلقولهای تکی، اسکیپهای hex و نماد 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
از اسکیپهای hex با \x، \u{...} برای محدوده کامل Unicode (فراتر از BMP)، \v برای تب عمودی و \0 برای null پشتیبانی میکند. هم نقلقول تکی و هم دوگانه قابل اسکیپ هستند. Template literal ها (backtick) از اکثر نیازهای اسکیپ جلوگیری میکنند.
Python
دنبالههای اصلی مشابه JavaScript، بهعلاوه اسکیپهای hex با \x و \N{name} برای کاراکترهای Unicode نامگذاریشده. رشتههای خام (r"...") پردازش اسکیپ را کاملاً غیرفعال میکنند. هم نقلقول تکی و هم دوگانه قابل اسکیپ هستند.
JSON
محدودترین فرمت. فقط \" (نقلقول دوگانه)، \\، \/، \n، \r، \t، \b، \f و \uNNNN معتبر هستند. اسکیپ نقلقول تکی وجود ندارد (رشتههای JSON همیشه از نقلقول دوگانه استفاده میکنند). اسکیپ hex، \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 encoding کاراکترهای ناامن را با دنبالههای درصد-hex جایگزین میکند. اسکیپ خوانایی را حفظ میکند؛ رمزنگاری فرمت را کاملاً تغییر میدهد.
چرا رشته من دارای بکاسلش دوتایی (\\\\) بهجای تکی است؟
بکاسلش دوتایی زمانی ظاهر میشود که یک رشته دوبار اسکیپ شده باشد. این اتفاق اغلب زمانی رخ میدهد که داده از چندین لایه سریالسازی عبور میکند — بهعنوان مثال، یک مقدار JSON ذخیرهشده در داخل رشتهای دیگر از JSON، یا یک خط لاگ که قبل از نوشتن در فایل JSON-encode شده است. برای رفع آن، رشته را یک لایه در یک بار unescape کنید تا به محتوای اصلی برسید.
چگونه یک رشته را برای JSON در JavaScript اسکیپ کنم؟
از JSON.stringify() استفاده کنید. رشته را در نقلقول دوگانه میپیچد و تمام کاراکترهایی که JSON نیاز دارد را اسکیپ میکند: بکاسلشها، نقلقولهای دوگانه، خطوط جدید، تبها و کاراکترهای کنترلی زیر U+0020. اگر فقط محتوای داخلی بدون نقلقولهای محیطی میخواهید، از JSON.stringify(str).slice(1, -1) استفاده کنید.
آیا رشتههای JSON میتوانند نقلقول تکی داشته باشند؟
خیر. مشخصات JSON (RFC 8259) نیاز دارد که همه رشتهها در نقلقول دوگانه قرار گیرند. نقلقول تکی در JSON جداکننده رشته معتبری نیست. در حالی که برخی پارسرهای آسانگیر آنها را قبول میکنند، هر پارسر JSON مطابق با استاندارد یک رشته محاط در نقلقول تکی را رد میکند. اگر رشته شما شامل کاراکتر نقلقول تکی است، میتواند بههمان شکل در داخل JSON دوگانهنقلقول ظاهر شود — نیازی به اسکیپ نیست.
رشته خام در Python چیست؟
یک رشته خام (با پیشوند r، مثل r"C:\Users\name") به مفسر Python میگوید که بکاسلشها را بهعنوان کاراکترهای تحتاللفظی نه نشانگرهای اسکیپ تلقی کند. این برای مسیرهای فایل ویندوز، عبارات منظم و هر رشتهای که باید بکاسلشها حفظ شوند مفید است. توجه داشته باشید که یک رشته خام نمیتواند با تعداد فرد بکاسلش ختم شود، زیرا بکاسلش انتهایی نقلقول بستن را اسکیپ میکند.
چگونه کاراکترهای Unicode را در JavaScript اسکیپ کنم؟
JavaScript دو شکل اسکیپ Unicode پشتیبانی میکند. نحو \uNNNN کاراکترهای در صفحه چندزبانه پایه (U+0000 تا U+FFFF) را مدیریت میکند، مثل \u00e9 برای 'e با آکسان تیز'. برای کاراکترهای خارج از BMP (اموجی، خطهای نادر)، از \u{NNNNN} با حداکثر شش رقم hex استفاده کنید — برای مثال، \u{1F600} برای اموجی چهره خندان. شکل \u{'} در ES2015 معرفی شد.
آیا اسکیپ رشته به امنیت (XSS، SQL injection) مرتبط است؟
اسکیپ در سطح زبان و اسکیپ امنیتی هدفهای متفاوتی دارند، اما ایده یکسان است: جلوگیری از تفسیر کاراکترهای خاص بهعنوان کد. برای جلوگیری از XSS، موجودیتهای HTML را اسکیپ میکنید (<، >، &). برای SQL injection، بهجای اسکیپ دستی از کوئریهای پارامتری استفاده میکنید. این ابزار اسکیپ رشته در سطح زبان (دنبالههای بکاسلش) را مدیریت میکند، نه اسکیپ HTML یا SQL.