مقدمه

امکان افزودن دو گروه از کاراکترهای متنی به صفحات وب با استفاده از تایپ مستقیم وجود ندارد: یکی کاراکترهایی که روی کیبورد ما وجود ندارند و دیگری کاراکترهایی مانند < و > که برای مفسرهای HTML معنای مشخصی دارند و برای وارد کردن آنها در صفحات وب باید از روشی به‌جز تایپ مستقیم آنها استفاده کرد. راه حلی که برای استفاده از این دو گروه از کاراکترها در صفحات وب وجود دارد، استفاده از موجودیت‌های کاراکتری (character entities) است. برای درک مفهوم موجودیت‌های کاراکتری باید اول با مفهوم مجموعه‌های کاراکتری (character sets) آشنا شویم. در این درس، این مفاهیم را مورد بررسی قرار داده و خواهیم دید که چطور می‌توانیم تقریباً هر کاراکتری را در صفحات وب وارد کنیم.

نقش مجموعه‌های کاراکتری

می‌دانیم که زبان کامپیوتر زبان اعداد است و همانطور که ساختار فیزیکی ما انسان‌ها (که دارای 10 انگشت هستیم) در گذر زمان ما را به سمت اعداد دهدهی (decimal) سوق داده، متخصصان و دانشمندان علوم کامپیوتر نیز به مرور زمان دریافتند که با توجه به ساختار فیزیکی کامپیوترها (که دارای ترانزیستورهای دو حالته هستند) بهتر است که در طراحی زبان و معماری کامپیوترها از اعداد باینری (اعداد در مبنای 2) استفاده شود. حالا سوال اینجاست که اگر زبان کامپیوتر زبان اعداد است، پس چطور می‌تواند کاراکترهای متنی را نمایش دهد؟

ارائه‌ی یک پاسخ دقیق به سوال بالا و به طور کلی، پرداختن به جزئیات مربوط به پاراگراف بالا، به بحث کامل و مفصلی در ارتباط با معماری کامپیوتر نیاز دارد؛ اما به طور خلاصه می‌توان گفت که:

پلتفرم‌های کامپیوتری مانند وب متکی به مفهومی به نام مجموعه‌های کاراکتری (character sets) هستند که برای آنها حکم الفبا را دارد. یک مجموعه‌ی کاراکتری شامل لیستی از کاراکترهای متنی است که یک پلتفرم مانند وب می‌تواند از آنها استفاده کند. از طرفی، یک مجموعه‌ی کاراکتری دارای مکملی است با نام سیستم encoding که هر کاراکتر موجود در مجموعه را به یک عدد متناظر می‌کند. بنابراین، کامپیوترها کاراکترهای متنی را از روی عدد متناظر آنها که code point نامیده می‌شود، شناسایی کرده و نمایش می‌دهند.

مجموعه کاراکتری Unicode

مجموعه‌ی کاراکتری پیش فرض وب، Unicode نام دارد که شامل کاراکترهای الفبایی و نگارشی اکثر زبان‌های دنیاست و به همین دلیل است که ما می‌توانیم از کاراکترهای انگلیسی و فارسی و چینی و ژاپنی و غیره در صفحات وب استفاده کنیم. البته در سال‌های ابتدایی وب، این پلتفرم دارای یک مجموعه‌ی کاراکتری بسیار کوچکتر با نام ASCII بود که تنها از 128 کاراکتر موجود در الفبای زبان‌های لاتین تشکیل می‌شد.

هر کاراکتر ASCII یک بایت فضا اشغال می‌کند اما Unicode یک مجموعه‌ی کاراکتری است که اصطلاحاً variable length است؛ یعنی کاراکترهای آن سایز یکسانی ندارند و می‌توانند از یک تا چهار بایت فضا اشغال کنند.

اما همانطور که گفته شد، هر مجموعه‌ی کاراکتری به یک سیستم encoding نیز نیاز دارد که به هر کاراکتر موجود در مجموعه، یک code point متناظر می‌کند. همانطور که می‌دانید، در صفحات وب ما همیشه از یک تگ meta به فرم زیر استفاده می‌کنیم:

Copy Icon HTML
<meta charset="utf-8">

utf-8 نام یک سیستم encoding برای مجموعه‌ی کاراکتری Unicode است که به هر کاراکتر Unicode یک code point اختصاص می‌دهد.

نقش موجودیت‌های کاراکتری

بسیار خوب، تا اینجا می‌دانیم که برای هر کاراکتر موجود در یک مجموعه‌ی کاراکتری مانند Unicode عددی به نام code point وجود دارد که توسط یک سیستم encoding مانند utf-8 تعیین شده است. وقتی ما کاراکتری را با فشردن کلیدی از روی کیبورد در صفحه‌ی وب تایپ می‌کنیم، در واقع، code point مربوط به آن کاراکتر برای مرورگر ارسال می‌شود.

ما می‌توانیم به جای فشردن کلید از روی کیبورد، مستقیماً code point مربوط به آن کاراکتر یا هر کاراکتر غیرکیبوردی دیگر را وارد کنیم اما برای این کار، باید از گرامر مشخصی استفاده کنیم تا مرورگر متوجه شود که باید کاراکتر متناظر با عدد را درج کند و نه خود عدد را. به کاراکتری که به این شکل به مرورگر معرفی می‌شود، یک موجودیت کاراکتری (character entity)‌ گفته می‌شود.

در صفحات وب، یک موجودیت کاراکتری را می‌توان به یکی از دو فرم زیر ایجاد کرد:

  • فرم &#number; که در آن به جای number، باید code point مربوط به کاراکتر مورد نظر آورده شود. برای مثال، برای درج کاراکتر ∀ در صفحه به این روش، می‌توانیم عبارت &#8704; را درج کنیم، چون code point معادل این کاراکتر 8704 است.
  • فرم &name; که در آن به جای name باید نام موجودیت کاراکتری مورد نظر آورده شود. برای مثال، برای درج کاراکتر ∀ در صفحه به این روش، می‌توانیم عبارت &forall; را تایپ کنیم، چون نام این کاراکتر forall است.

می‌توانید از صفحه‌ی Character Entities از وبسایت WHATWG به عنوان مرجعی برای نام کاراکترهای مختلف استفاده کنید.

همانطور که قبلاً دیدیم، مرورگرها فاصله‌های اضافی بین کلمات را (جز در مورد عنصر pre) نادیده می‌گیرند و به روش معمول، امکان قرار دادن بیش از یک فاصله بین دو کلمه وجود ندارد. با استفاده از یک موجودیت کاراکتری به فرم &nbsp; که نامش از روی عبارت non-break space گرفته شده، می‌توانیم یک کاراکتر فاصله ایجاد کنیم که توسط مرورگر نادیده گرفته نمی‌شود.