رمزگذاری و رمزگشایی HTML Entity
نویسههایی را که HTML آنها را نشانهگذاری تلقی میکند، و در صورت تمایل همهٔ نویسههای غیر ASCII را، به entity تبدیل کنید، یا entityهایی مانند é و — را به متن ساده برگردانید. هر دو جهت در مرورگر شما اجرا میشوند و ورودی رمزگشاییشده هرگز بهصورت HTML زنده نمایش داده نمیشود.
۰ نویسه · ۰ واژه · ۰ خط
۰ نویسه · ۰ واژه · ۰ خط
کاملاً در همین زبانهٔ مرورگر اجرا میشود. متن شما هرگز آپلود یا ذخیره نمیشود.
نویسههای رایج و موجودیتهایشان
شکلهای نامدار، دهدهی و هگزادسیمال همگی به یک نویسه رمزگشایی میشوند. رمزگذار 216 موجودیت نامدار رایج را میشناسد؛ رمزگشا همهٔ ارجاعات نامدار استاندارد HTML را میفهمد.
| نویسه | نامدار | دهدهی | هگز |
|---|---|---|---|
& | & | & | & |
< | < | < | < |
> | > | > | > |
" | " | " | " |
' | ' | ' | ' |
(فاصلهٔ بدون شکست) | |   |   |
© | © | © | © |
® | ® | ® | ® |
™ | ™ | ™ | ™ |
€ | € | € | € |
£ | £ | £ | £ |
¥ | ¥ | ¥ | ¥ |
— | — | — | — |
– | – | – | – |
… | … | … | … |
« | « | « | « |
» | » | » | » |
° | ° | ° | ° |
× | × | × | × |
÷ | ÷ | ÷ | ÷ |
é | é | é | é |
π | π | π | π |
→ | → | → | → |
😀 | — | 😀 | 😀 |
از 252 entity در HTML 4 تا 2,231 entity در HTML5
ارجاع نویسه روشی برای نوشتن یک نویسه فقط با ASCII است. ارجاعهای عددی برای هر کدپوینت یونیکد کار میکنند، چه دهدهی (é) و چه شانزدهشانزدهی (é). ارجاعهای نامدار راحتتر به خاطر سپرده میشوند: HTML 4 تعداد 252 مورد از آنها را تعریف کرد که حروف Latin-1 مانند é، حروف یونانی، نمادهای ریاضی و علائم تایپوگرافی مانند — و … را پوشش میدهند. جالب است که ' جزو آنها نبود؛ این مورد از XML آمد و فقط با HTML5 در HTML معتبر شد.
HTML5 فهرست را به 2,231 ارجاع نویسه نامدار رساند و مجموعه موجودیتهای MathML را هم در خود گرفت، بنابراین نامهایی مانند ✓، ★ و ≂̸ اکنون در همه مرورگرهای امروزی کار میکنند. این شمار شامل املاهای قدیمی بدون نقطهویرگول پایانی هم هست، مانند & و ©، که تجزیهگرها برای سازگاری همچنان میپذیرند اما نباید آنها را بنویسید. رمزگذار اینجا نامهای پرپشتیبان HTML 4 بهعلاوه ' را تولید میکند و برای بقیه نویسهها از ارجاع عددی استفاده میکند؛ رمزگشا متن را به تجزیهگر خود مرورگر میدهد و بنابراین هر 2,231 نام را میشناسد.
چه چیزی را باید escape کرد و کجا escape کافی نیست
گزینه فقط & < > " ' برای کار روزمره است: پنج نویسهای را که میتوانند یک گره متنی یا یک صفت داخل نقلقول را پایان دهند escape میکند، که برای نمایش نمونه کد در صفحه یا قرار دادن امن متن کاربر درون HTML کافی است. همه نویسههای غیر ASCII هم حرف é، علامت € و ایموجی را نیز به ارجاع تبدیل میکند، برای کانالهای نادری که نمیتوانند UTF-8 را منتقل کنند، مانند برخی قالبهای ایمیل قدیمی یا سیستمهایی که کدگذاری را خراب میکنند. گزینههای نامدار، دهدهی و شانزدهشانزدهی فقط شیوه نوشتن ارجاع را تغییر میدهند؛ هر سه به یک نویسه رمزگشایی میشوند. صفحهای که با UTF-8 ذخیره شده باشد برای حروف دارای اعراب به موجودیت نیاز ندارد.
escape فقط از بافت HTML محافظت میکند و بس. متنی که در بلوک script، رویدادگردان درونخطی مانند onclick، صفت style یا hrefای که ممکن است با javascript: شروع شود قرار میگیرد، به پردازش دیگری نیاز دارد و رمزگذاری موجودیت بهتنهایی جلوی cross-site scripting را در آنجا نمیگیرد. فریمورکهایی مانند React بهطور پیشفرض متن را escape میکنند، پس در برنامههای امروزی escape مضاعف خطای رایجتری است: کاربران بهجای یک آمپرسند، & را میبینند. برای حذف کامل تگها، نشانهگذاری را با HTML به TXT تبدیل کنید؛ برای escape درون نشانیها از رمزگذاری و رمزگشایی URL استفاده کنید.
پرسشهای متداول
- کدام نویسهها در HTML باید escape شوند؟
- در متن، & و < ضروریاند و > طبق عرف escape میشود. درون مقدار صفت، نویسه نقلقولی که آن را محدود میکند هم باید escape شود. escape هر پنج نویسه هر دو حالت را پوشش میدهد.
- تفاوت با فاصلهٔ معمولی چیست؟
فاصله بدون شکست خط، یعنی U+00A0 است. شبیه فاصله است اما در آن نقطه از رفتن به خط بعد جلوگیری میکند و برخلاف فاصلههای معمولی در HTML، وقتی چندتا پشت هم بیایند در هم ادغام نمیشود.- چرا صفحهٔ من بهجای نماد & عبارت & را نشان میدهد؟
- متن دو بار escape شده است: یک بار در دادههای شما و بار دیگر توسط قالب یا فریمورک. متن خام را ذخیره کنید و بگذارید فقط یک لایه، معمولاً قالب، هنگام خروجی escape را انجام دهد.
- آیا رمزگشایی HTML از منبع نامطمئن در اینجا امن است؟
- بله. رمزگشا ورودی را بهعنوان محتوای متنی ساده تجزیه میکند، پس تگی ساخته نمیشود، اسکریپتی اجرا نمیشود و تصویری بارگذاری نمیشود. فقط ارجاعهای موجودیت به نویسه تبدیل میشوند.
- entityهای نامدار بهترند یا عددی؟
- نامدارها خواناترند، اما عددیها برای هر نویسه و در هر تجزیهگر XML کار میکنند. در XML بدون DTD فقط
&،<،>،"و'از پیش تعریف شدهاند.