HTML Encoder

HTML Encoder / Decoder

کاراکترهای `& < > " '` را به موجودیت‌های امن HTML تبدیل کنید، یا متن دارای موجودیت را به متن ساده بازگردانید. چهار سطح رمزگذاری — Minimal، Named، Numeric، All non-ASCII. سازگار با UTF-8، اموجی و CJK، در مرورگر شما.

به‌صورت پیش‌فرض از Minimal استفاده کنید — فقط & < > " ' را escape می‌کند، همان پنج کاراکتری که زمینهٔ HTML body / attribute را خراب می‌کنند. هر موتور قالب مدرن همین کار را می‌کند. اگر می‌خواهید copyright / nbsp / فلش‌ها و... به‌صورت کدهای خوانا (&copy; به‌جای &#169;) باشند، از Named entities استفاده کنید. وقتی HTML را از پایپ‌لاین‌هایی عبور می‌دهید که ممکن است موجودیت‌های نام‌دار را نشناسند، از Numeric استفاده کنید. وقتی هدف شما سیستم‌های اکیداً فقط ASCII است (سرورهای ایمیل قدیمی، APIهای خراب)، از All non-ASCII استفاده کنید.

&apos; در XML و HTML5 معتبر است، اما در HTML 4.01 معتبر نیست — مرورگرهای قدیمی آن را به‌صورت متن خام ' نمایش می‌دهند. ارجاع عددی &#39; همه‌جا کار می‌کند. رمزگشا برای سازگاری &apos; را به‌عنوان ورودی می‌پذیرد.

ورودی
خروجی

ساخته‌شده برای خروجی HTML امن

محتوای کاربر را برای قالب‌ها escape کنید، داده‌های entity-encoded را رمزگشایی کنید — به‌علاوهٔ چند جزئیات کوچک که استفاده از آن را واقعاً لذت‌بخش می‌کند.

چهار حالت رمزگذاری

Minimal فقط پنج کاراکتر ناامن HTML (& < > " ') را escape می‌کند — پیش‌فرض درست برای محتوای معمول کاربر. Named از موجودیت‌های خوانای HTML5 مانند &copy; / &nbsp; / &hearts; هرجا که موجود باشد استفاده می‌کند. Numeric هر codepoint غیر ASCII را به‌صورت &#NN; رمزگذاری می‌کند. All non-ASCII هر codepoint خارج از ASCII قابل چاپ را برای پایپ‌لاین‌های قدیمی / فقط ASCII رمزگذاری می‌کند.

رمزگشایی هر موجودیت

رمزگشا موجودیت‌های نام‌دار (&copy;)، عددی اعشاری (&#169;) و عددی هگزادسیمال (&#xA9;) را پشتیبانی می‌کند. codepointهای جفت surrogate (اموجی، خطوط باستانی) از طریق UTF-16 به‌درستی رفت و برگشت می‌کنند.

پیش‌نمایش زنده

خروجی با هر فشردن کلید به‌روزرسانی می‌شود — نیازی به فشردن دکمهٔ Encode / Decode نیست. با یک کلیک جهت را تغییر دهید؛ دکمهٔ Swap خروجی را به ورودی منتقل می‌کند تا بتوانید تبدیل‌ها را زنجیره‌ای انجام دهید.

سازگار با UTF-8، اموجی و CJK

هر codepoint یونیکد به‌درستی رفت و برگشت می‌کند: 中文، العربية، русский، हिंदी، 🎉، Þorgeir. رمزگذار از پیمایش بر اساس codepoint (نه charAt) استفاده می‌کند تا جفت‌های surrogate دست‌نخورده بمانند.

حریم خصوصی از پایه

متن شما روی دستگاهتان می‌ماند. رمزگذار، رمزگشا و جدول موجودیت‌های نام‌دار همگی به‌صورت محلی به‌عنوان JavaScript اجرا می‌شوند. DevTools → Network را باز کنید و صفر درخواست خروجی را تأیید کنید.

کوچک و سریع

JavaScript خالص، بدون runtime فریم‌ورک. بارگذاری اولیه کمتر از ۲۵ کیلوبایت gzip شده است. یک سند HTML با حجم ۱۰۰ کیلوبایت در کمتر از ۵ میلی‌ثانیه رمزگذاری می‌شود.

چطور موجودیت‌های HTML را رمزگذاری یا رمزگشایی کنیم

چهار گام از متن خام تا خروجی امن از نظر موجودیت.

  1. 1

    متن خود را بچسبانید

    متن ساده یا HTML را در پنل Input رها کنید. هر چیزی قابل قبول است — کامنت کاربر، پست وبلاگ، اموجی، CJK، خطوط راست‌به‌چپ. رمزگذار بر اساس codepoint پیمایش می‌کند تا توالی‌های چندبایتی دست‌نخورده بمانند.

  2. 2

    جهت و حالت را انتخاب کنید

    Direction را روی Encode (متن → موجودیت) یا Decode (موجودیت → متن) تنظیم کنید. برای Encode، حالت را انتخاب کنید: Minimal برای قالب‌ها، Named برای موجودیت‌های خوانا، Numeric برای غیر ASCII به‌صورت &#NN;، All non-ASCII برای خروجی فقط ASCII.

  3. 3

    پیش‌نمایش زنده را تماشا کنید

    خروجی با هر فشردن کلید به‌روزرسانی می‌شود. با تغییر منوی کشویی، حالت‌ها را به‌صورت زنده مقایسه کنید. از Swap برای انتقال خروجی به ورودی استفاده کنید — برای راستی‌آزمایی رفت و برگشت مفید است (encode سپس decode = اصل).

  4. 4

    کپی یا دانلود

    از آیکون کپی برای انتقال نتیجه به clipboard، یا از آیکون دانلود برای ذخیرهٔ آن به‌صورت output.encode.html / output.decode.txt استفاده کنید. تفاوت اندازه (کاراکتر / بایت ورودی → خروجی) دقیقاً نشان می‌دهد رمزگذاری چقدر متن را بزرگ یا کوچک کرده است.

ساخته‌شده برای کارهای روزانهٔ توسعهٔ وب

چهار سناریوی متداول که در آن یک ابزار مرورگری با اولویت حریم خصوصی بهتر از چسباندن کد در یک رمزگذار آنلاین تصادفی است.

جاسازی امن محتوای کاربر در یک قالب

کامنت کاربر، پاسخ فرم، پرس‌وجوی جستجو — هر چیزی که از بیرون می‌آید و درون <p>، <li> یا attribute قرار می‌گیرد. قبل از الحاق رشته در HTML، آن را از حالت Minimal-mode encode عبور دهید تا از markup خراب و ساده‌ترین payloadهای XSS در امان باشید.

خواندن دادهٔ entity-escaped از یک API

برخی APIها رشته‌های از قبل entity-escaped برمی‌گردانند (فید RSS، خروجی برخی CMSها، HTML اسکرپ‌شده). بچسبانید، Decode بزنید، یونیکد اصل را بگیرید. رمزگشا موجودیت‌های نام‌دار، اعشاری و هگز شامل جفت‌های surrogate را پشتیبانی می‌کند.

خط موضوع ایمیل و تگ‌های متا

<title>، <meta name="description">، <meta property="og:title"> — همه برای کاراکترهای خاص نیاز به entity escape دارند. عنوان خود را یک‌بار رمزگذاری کنید، در هر سه بچسبانید.

محتوای حساس که نمی‌تواند به سرویس شخص ثالث برود

محتوای CMS داخلی، دادهٔ مشتری، قالب‌های تحت NDA — هر چیزی که نمی‌توانید در یک رمزگذار ابری بچسبانید. ابزار فقط مرورگری هر بایت را روی لپ‌تاپ شما نگه می‌دارد. DevTools → Network را باز کنید و تأیید کنید چیزی خارج نمی‌شود.

۱۰۰٪ خصوصی — در مرورگر شما اجرا می‌شود

متن شما هرگز از دستگاهتان خارج نمی‌شود. DevTools → Network را باز کنید و خواهید دید که در حین رمزگذاری یا رمزگشایی صفر درخواست خروجی وجود دارد.

  • رمزگذار، رمزگشا و جدول جستجوی موجودیت‌های نام‌دار همگی به‌صورت JavaScript روی دستگاه شما اجرا می‌شوند — بدون تبدیل سمت سرور، بدون API شخص ثالث.
  • codepointهای جفت surrogate (اموجی، خطوط باستانی) با پیمایش codepoint مدیریت می‌شوند، نه نگاشت سطح بایت — پس چسباندن 🎉 پس از رفت و برگشت همان 🎉 باقی می‌ماند.
  • بدون ورود به حساب، بدون تله‌متری روی محتوای متن. ما فقط از یک کوکی برای وضعیت رضایت کوکی و یکی برای ترجیح زبان استفاده می‌کنیم.

راهنماهای مرتبط

خواندنی‌های دست‌چین‌شده دربارهٔ HTML escaping، جداول موجودیت و قالب‌بندی امن.

پرسش‌های متداول

کدام حالت را انتخاب کنم؟

به‌صورت پیش‌فرض از Minimal استفاده کنید — فقط & < > " ' را escape می‌کند، همان پنج کاراکتری که زمینهٔ HTML body / attribute را خراب می‌کنند. هر موتور قالب مدرن همین کار را می‌کند. اگر می‌خواهید copyright / nbsp / فلش‌ها و... به‌صورت کدهای خوانا (&copy; به‌جای &#169;) باشند، از Named entities استفاده کنید. وقتی HTML را از پایپ‌لاین‌هایی عبور می‌دهید که ممکن است موجودیت‌های نام‌دار را نشناسند، از Numeric استفاده کنید. وقتی هدف شما سیستم‌های اکیداً فقط ASCII است (سرورهای ایمیل قدیمی، APIهای خراب)، از All non-ASCII استفاده کنید.

چرا این ابزار `'` را به‌جای `&apos;` به‌صورت `&#39;` escape می‌کند؟

&apos; در XML و HTML5 معتبر است، اما در HTML 4.01 معتبر نیست — مرورگرهای قدیمی آن را به‌صورت متن خام ' نمایش می‌دهند. ارجاع عددی &#39; همه‌جا کار می‌کند. رمزگشا برای سازگاری &apos; را به‌عنوان ورودی می‌پذیرد.

آیا اموجی و کاراکترهای CJK سالم باقی می‌مانند؟

بله. رمزگذار codepointها را پیمایش می‌کند (نه واحدهای کد UTF-16)، پس اموجی‌هایی مانند 🎉 (U+1F389) هنگام رمزگذاری به &#127881; تبدیل می‌شوند و در رمزگشایی به‌درستی بازمی‌گردند. همین برای CJK نیز برقرار است (中文 → &#20013;&#25991; در حالت numeric).

آیا جاسازی مستقیم ورودی کاربر در HTML پس از رمزگذاری امن است؟

برای HTML body و attributeها — بله، با حالت Minimal. برای زمینه‌های URL (href="...") به URL encoding نیز نیاز دارید. برای JavaScript یا CSS درون‌خطی، نه HTML encoding و نه URL encoding کافی نیستند — از یک موتور قالب مناسب که این زمینه‌ها را می‌فهمد استفاده کنید. هرگز ورودی escape نشدهٔ کاربر را در یک بلوک <script> قرار ندهید.

آیا چیزی به سرور شما ارسال می‌شود؟

خیر. رمزگذار، رمزگشا و جدول جستجوی موجودیت‌های نام‌دار همگی به‌صورت JavaScript روی دستگاه شما اجرا می‌شوند. DevTools → Network را باز کنید و خواهید دید که در حین رمزگذاری یا رمزگشایی صفر درخواست خروجی وجود دارد. اطلاعات محرمانه، دادهٔ مشتری، قالب‌های داخلی را بچسبانید — هیچ چیزی از لپ‌تاپ شما خارج نمی‌شود.