کتابخانه‌ی استاندارد · کدگذاری و داده

اچ تی ام ال encoding.html

تبدیل موجودیت‌های اچ‌تی‌ام‌ال، نامدار و عددی، به متن و تبدیل متن به اچ‌تی‌ام‌ال امن.

واردسازی کدگذاری.اچ تی ام ال

نام آرگومان‌ها شناسه‌ی خود کد است و معادل فارسی ندارد؛ گونه‌ها، کلیدواژه‌ها و نام بسته‌ها با معادل فارسی نوشته می‌شوند.

اچ‌تی‌ام‌ال نمی‌تواند در متن خود < یا & خالی داشته باشد، پس آن‌ها را به شکل موجودیت می‌فرستد: &lt;، &amp;، &eacute; یا یک عدد مثل &#233; و &#xE9;. بازگردانی موجودیت ها هر موجودیتِ رشته را به نویسه‌ای که نام می‌برد برمی‌گرداند؛ اسکیپ و اسکیپ متن راه برعکس را می‌روند. وقتی متنی را از یک صفحه یا خوراک می‌خوانید و وقتی متنی با منشأ نامعلوم را در صفحه می‌گذارید به کار می‌آیند.

بازگردانی موجودیت ها قاعده‌های HTML5 را مثل html.unescape پایتون دنبال می‌کند و روی همه‌ی ورودی‌هایی که با آن سنجیده شد همان جواب را می‌دهد: همه‌ی موجودیت‌های نامدار استاندارد HTML (از جمله آن‌هایی که نماینده‌ی دو نویسه‌اند)، عدد دهدهی و شانزدهی، نام‌های قدیمی‌ای که مرورگرها بدون ; پایانی می‌پذیرند (&copy، &amp)، عددهای ۱۲۸ تا ۱۵۹ به‌عنوان نویسه‌های ویندوز-۱۲۵۲ و نویسه‌ی جایگزین برای &#0;، جفت‌های جانشین و عددهای فراتر از یونیکد. هر چه موجودیت نباشد همان‌طور می‌ماند.

اشتباه‌های رایج:

  • بازگردانی متن پیش از استفاده به‌عنوان HTML. بعد از بازگردانی موجودیت ها متن دوباره متن ساده است؛ اگر به صفحه برمی‌گردد باید دوباره اسکیپ شود.
  • استفاده از اسکیپ متن درون ویژگی. گیومه را دست نمی‌زند، پس مقداری که " دارد از href="..." بیرون می‌زند. برای ویژگی‌ها اسکیپ را بزنید.
  • انتظار این‌که اسکیپ نشانی یا اسکریپت را امن کند. فقط جاهایی را محافظت می‌کند که متن HTML یا ویژگی درون گیومه می‌آید. پیوند javascript: یا متن درون <script> به بیشتر از اسکیپ نیاز دارد.
  • دو بار بازگردانی. &amp;lt; متنِ &lt; است؛ یک بار همین را می‌دهد و بار دوم < می‌داد.

بسته‌ی قالب هم EscapeHTML خودش را دارد؛ برای متن و ویژگی XML به کدگذاری.XML نگاه کنید.

اسکیپ کردن و برگرداندن متن

اسکیپ و بازگردانی وارونه‌ی هم‌اند: هر چه اسکیپ بسازد، بازگردانی موجودیت ها به اصلش برمی‌گرداند. نمونه‌ی زیر سه نظر را اسکیپ می‌کند و رفت‌وبرگشت را می‌آزماید.

encoding-html-guide-roundtrip.salam
واردسازی کدگذاری.اچ تی ام ال

تابع ریشه:
    comments := ["5 < 6 && 7 > 3"، `say "hi" & wave`، "it's <b>bold</b>"]
    هر comment در comments:
        escaped := اچ تی ام ال.اسکیپ(comment)
        سرچاپ escaped
        سرچاپ اچ تی ام ال.بازگردانی موجودیت ها(escaped) برابر comment
    پایان
پایان
خروجی5 &lt; 6 &amp;&amp; 7 &gt; 3 true say &quot;hi&quot; &amp; wave true it&#x27;s &lt;b&gt;bold&lt;/b&gt; true

ساختن اچ‌تی‌ام‌ال از متن نامطمئن

نامی که از کاربر می‌رسد ممکن است &، < یا گیومه داشته باشد. آن را در متن یک برچسب با اسکیپ متن و در مقدار یک ویژگی با اسکیپ بگذارید که هر دو گیومه را هم می‌پوشاند. در جهت دیگر، متنی که از یک صفحه برداشته شده باید پیش از مقایسه یا نمایش از بازگردانی موجودیت ها بگذرد.

encoding-html-guide-page.salam
// زبان: فارسی
واردسازی کدگذاری.اچ تی ام ال

تابع کارت(نام: رشته، یادداشت: رشته): رشته:
    برگشت `<div class="card" title="` + اچ تی ام ال.اسکیپ(نام) + `"><h2>` + اچ تی ام ال.اسکیپ متن(نام) + `</h2><p>` + اچ تی ام ال.اسکیپ متن(یادداشت) + `</p></div>`
پایان

تابع ریشه:
    سرچاپ کارت("Tom & Jerry"، "<b>not bold</b>")
    سرچاپ کارت(`He said "hi"`، "it's fine")
    گرفته شده := "Jos&eacute; &lt;open&gt; &amp; 5 &lt; 6 &#8211; &euro;3"
    سرچاپ اچ تی ام ال.بازگردانی موجودیت ها(گرفته شده)
پایان
خروجی<div class="card" title="Tom &amp; Jerry"><h2>Tom &amp; Jerry</h2><p>&lt;b&gt;not bold&lt;/b&gt;</p></div> <div class="card" title="He said &quot;hi&quot;"><h2>He said "hi"</h2><p>it's fine</p></div> José <open> & 5 < 6 – €3

تابع‌ها

بازگردانی موجودیت ها Unescape

تابع بازگردانی موجودیت ها(s: رشته): رشته
هر موجودیت HTML متن را با نویسه‌هایی که نماینده‌شان است عوض می‌کند: نامدار (&eacute;)، دهدهی (&#233;) و شانزدهی (&#xE9;)، با همان قاعده‌های html.unescape پایتون. متنی که موجودیت درستی نیست بدون تغییر می‌ماند. نتیجه رشته‌ی تازه‌ای است.
encoding-html-Unescape.salam
واردسازی کدگذاری.اچ تی ام ال

تابع ریشه:
    page := "&lt;p&gt;Fianc&eacute; &amp; cr&egrave;me &#8212; &#x20AC;5&lt;/p&gt;"
    سرچاپ اچ تی ام ال.بازگردانی موجودیت ها(page)
    سرچاپ اچ تی ام ال.بازگردانی موجودیت ها("Tom &amp; Jerry &copy 2026, a &lt b")
    safe := اچ تی ام ال.اسکیپ(`<a href="x">it's</a>`)
    سرچاپ safe
    سرچاپ اچ تی ام ال.اسکیپ متن(`<a href="x">it's</a>`)
    سرچاپ اچ تی ام ال.بازگردانی موجودیت ها(safe)
پایان
خروجی<p>Fiancé & crème — €5</p> Tom & Jerry © 2026, a < b &lt;a href=&quot;x&quot;&gt;it&#x27;s&lt;/a&gt; &lt;a href="x"&gt;it's&lt;/a&gt; <a href="x">it's</a>

اسکیپ Escape

تابع اسکیپ(s: رشته): رشته
&، <، >، " و ' را با &amp;، &lt;، &gt;، &quot; و &#x27; عوض می‌کند، پس متن هم در متن HTML و هم در ویژگی درون گیومه امن است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-html-Unescape.salam

اسکیپ متن EscapeText

تابع اسکیپ متن(s: رشته): رشته
فقط &، < و > را عوض می‌کند. در متن HTML امن است، در ویژگی نه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-html-Unescape.salam