اچ تی ام ال encoding.html
تبدیل موجودیتهای اچتیامال، نامدار و عددی، به متن و تبدیل متن به اچتیامال امن.
واردسازی کدگذاری.اچ تی ام ال
نام آرگومانها شناسهی خود کد است و معادل فارسی ندارد؛ گونهها، کلیدواژهها و نام بستهها با معادل فارسی نوشته میشوند.
اچتیامال نمیتواند در متن خود < یا & خالی داشته باشد، پس آنها را به شکل موجودیت میفرستد: <، &، é یا یک عدد مثل é و é. بازگردانی موجودیت ها هر موجودیتِ رشته را به نویسهای که نام میبرد برمیگرداند؛ اسکیپ و اسکیپ متن راه برعکس را میروند. وقتی متنی را از یک صفحه یا خوراک میخوانید و وقتی متنی با منشأ نامعلوم را در صفحه میگذارید به کار میآیند.
بازگردانی موجودیت ها قاعدههای HTML5 را مثل html.unescape پایتون دنبال میکند و روی همهی ورودیهایی که با آن سنجیده شد همان جواب را میدهد: همهی موجودیتهای نامدار استاندارد HTML (از جمله آنهایی که نمایندهی دو نویسهاند)، عدد دهدهی و شانزدهی، نامهای قدیمیای که مرورگرها بدون ; پایانی میپذیرند (©، &)، عددهای ۱۲۸ تا ۱۵۹ بهعنوان نویسههای ویندوز-۱۲۵۲ و نویسهی جایگزین برای �، جفتهای جانشین و عددهای فراتر از یونیکد. هر چه موجودیت نباشد همانطور میماند.
اشتباههای رایج:
- بازگردانی متن پیش از استفاده بهعنوان HTML. بعد از
بازگردانی موجودیت هامتن دوباره متن ساده است؛ اگر به صفحه برمیگردد باید دوباره اسکیپ شود. - استفاده از
اسکیپ متندرون ویژگی. گیومه را دست نمیزند، پس مقداری که"دارد ازhref="..."بیرون میزند. برای ویژگیهااسکیپرا بزنید. - انتظار اینکه
اسکیپنشانی یا اسکریپت را امن کند. فقط جاهایی را محافظت میکند که متن HTML یا ویژگی درون گیومه میآید. پیوندjavascript:یا متن درون<script>به بیشتر از اسکیپ نیاز دارد. - دو بار بازگردانی.
&lt;متنِ<است؛ یک بار همین را میدهد و بار دوم<میداد.
بستهی قالب هم EscapeHTML خودش را دارد؛ برای متن و ویژگی XML به کدگذاری.XML نگاه کنید.
اسکیپ کردن و برگرداندن متن
اسکیپ و بازگردانی وارونهی هماند: هر چه اسکیپ بسازد، بازگردانی موجودیت ها به اصلش برمیگرداند. نمونهی زیر سه نظر را اسکیپ میکند و رفتوبرگشت را میآزماید.
واردسازی کدگذاری.اچ تی ام ال
تابع ریشه:
comments := ["5 < 6 && 7 > 3"، `say "hi" & wave`، "it's <b>bold</b>"]
هر comment در comments:
escaped := اچ تی ام ال.اسکیپ(comment)
سرچاپ escaped
سرچاپ اچ تی ام ال.بازگردانی موجودیت ها(escaped) برابر comment
پایان
پایانساختن اچتیامال از متن نامطمئن
نامی که از کاربر میرسد ممکن است &، < یا گیومه داشته باشد. آن را در متن یک برچسب با اسکیپ متن و در مقدار یک ویژگی با اسکیپ بگذارید که هر دو گیومه را هم میپوشاند. در جهت دیگر، متنی که از یک صفحه برداشته شده باید پیش از مقایسه یا نمایش از بازگردانی موجودیت ها بگذرد.
// زبان: فارسی
واردسازی کدگذاری.اچ تی ام ال
تابع کارت(نام: رشته، یادداشت: رشته): رشته:
برگشت `<div class="card" title="` + اچ تی ام ال.اسکیپ(نام) + `"><h2>` + اچ تی ام ال.اسکیپ متن(نام) + `</h2><p>` + اچ تی ام ال.اسکیپ متن(یادداشت) + `</p></div>`
پایان
تابع ریشه:
سرچاپ کارت("Tom & Jerry"، "<b>not bold</b>")
سرچاپ کارت(`He said "hi"`، "it's fine")
گرفته شده := "José <open> & 5 < 6 – €3"
سرچاپ اچ تی ام ال.بازگردانی موجودیت ها(گرفته شده)
پایانتابعها
بازگردانی موجودیت ها Unescape
تابع بازگردانی موجودیت ها(s: رشته): رشتهé)، دهدهی (é) و شانزدهی (é)، با همان قاعدههای html.unescape پایتون. متنی که موجودیت درستی نیست بدون تغییر میماند. نتیجه رشتهی تازهای است.واردسازی کدگذاری.اچ تی ام ال
تابع ریشه:
page := "<p>Fiancé & crème — €5</p>"
سرچاپ اچ تی ام ال.بازگردانی موجودیت ها(page)
سرچاپ اچ تی ام ال.بازگردانی موجودیت ها("Tom & Jerry © 2026, a < b")
safe := اچ تی ام ال.اسکیپ(`<a href="x">it's</a>`)
سرچاپ safe
سرچاپ اچ تی ام ال.اسکیپ متن(`<a href="x">it's</a>`)
سرچاپ اچ تی ام ال.بازگردانی موجودیت ها(safe)
پایاناسکیپ Escape
تابع اسکیپ(s: رشته): رشته&، <، >، " و ' را با &، <، >، " و ' عوض میکند، پس متن هم در متن HTML و هم در ویژگی درون گیومه امن است.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-html-Unescape.salam
اسکیپ متن EscapeText
تابع اسکیپ متن(s: رشته): رشته&، < و > را عوض میکند. در متن HTML امن است، در ویژگی نه.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-html-Unescape.salam