مقدمه
امکان افزودن دو گروه از کاراکترهای متنی به صفحات وب با استفاده از تایپ مستقیم وجود
ندارد: یکی کاراکترهایی که روی کیبورد ما وجود ندارند و دیگری کاراکترهایی مانند < و
> که
برای مفسرهای 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 به فرم زیر استفاده میکنیم:
HTML
utf-8 نام یک سیستم encoding برای مجموعهی کاراکتری Unicode است که به هر کاراکتر Unicode
یک code point اختصاص میدهد.
نقش موجودیتهای کاراکتری
بسیار خوب، تا اینجا میدانیم که برای هر کاراکتر موجود در یک مجموعهی کاراکتری مانند
Unicode عددی به نام code point وجود دارد که توسط یک سیستم encoding مانند utf-8 تعیین شده
است. وقتی ما کاراکتری را با فشردن کلیدی از روی کیبورد در صفحهی وب تایپ میکنیم، در
واقع، code point مربوط به آن کاراکتر برای مرورگر ارسال میشود.
ما میتوانیم به جای فشردن کلید از روی کیبورد، مستقیماً code point مربوط به آن کاراکتر یا
هر کاراکتر غیرکیبوردی دیگر را وارد کنیم اما برای این کار، باید از گرامر مشخصی استفاده
کنیم تا مرورگر متوجه شود که باید کاراکتر متناظر با عدد را درج کند و نه خود عدد را. به
کاراکتری که به این شکل به مرورگر معرفی میشود، یک موجودیت کاراکتری (character entity)
گفته میشود.
در صفحات وب، یک موجودیت کاراکتری را میتوان به یکی از دو فرم زیر ایجاد کرد:
-
فرم number; که در آن به جای number، باید code point مربوط به کاراکتر
مورد نظر
آورده شود. برای مثال، برای درج کاراکتر ∀ در صفحه به این روش، میتوانیم عبارت
∀
را درج کنیم، چون code point معادل این کاراکتر 8704 است.
-
فرم &name; که در آن به جای name باید نام موجودیت کاراکتری مورد نظر
آورده شود. برای
مثال، برای درج کاراکتر ∀ در صفحه به این روش، میتوانیم عبارت ∀
را تایپ کنیم،
چون نام این کاراکتر forall است.
میتوانید از صفحهی Character Entities از وبسایت WHATWG به عنوان
مرجعی برای نام کاراکترهای مختلف
استفاده کنید.
همانطور که قبلاً دیدیم، مرورگرها فاصلههای اضافی بین کلمات را (جز در مورد عنصر pre)
نادیده میگیرند و به روش معمول، امکان قرار دادن بیش از یک فاصله بین دو کلمه وجود ندارد.
با استفاده از یک موجودیت کاراکتری به فرم که نامش از روی عبارت
non-break space
گرفته شده، میتوانیم یک کاراکتر فاصله ایجاد کنیم که توسط مرورگر نادیده گرفته نمیشود.