راهنمای تبدیل متن ساده (Plain Text) به HTML
نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۴/۱۱ ۱۱:۳۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
Newlines)، فاصلههای متوالی (Spaces) و کاراکترهای خاص به درستی نمایش داده نشوند و یا بدتر از آن، برنامه را در معرض آسیبپذیریهای امنیتی خطرناکی مانند تزریق کد (XSS) قرار دهند. در این مقاله به بررسی مکانیزمهای استاندارد، نکات امنیتی و روشهای بهینه برای تبدیل متن ساده به HTML قابل نمایش میپردازیم.< و > استفاده میکند. برای اینکه این کاراکترها به عنوان متن عادی و بدون تفسیر ساختاری نمایش داده شوند، باید آنها را به معادلهای متنی یا همان HTML Entities تبدیل کنیم. جدول زیر نگاشتهای حیاتی برای یک تبدیل امن و صحیح را نشان میدهد:| کاراکتر در متن ساده | معادل در HTML (Entity) | علت و کاربرد |
& | & | جلوگیری از تفسیر اشتباه به عنوان شروع یک Entity دیگر |
< | < | جلوگیری از تفسیر به عنوان شروع تگهای HTML |
> | > | جلوگیری از تفسیر به عنوان پایان تگهای HTML |
" | " | حفاظت از اتریبیوتها در ساختارهای تگ |
' | ' یا ' | حفاظت از اتریبیوتهای محصور در تککوتیشن |
\n یا \r\n | <br> | انتقال متن به خط بعدی (حفظ شکستگی خطوط) |
| چند فاصله متوالی | یا CSS | جلوگیری از فشردهسازی فاصلهها توسط مرورگر |
Tab (\t) | مجموعهای از یا CSS | ایجاد فضای دندانه دندانی (Indentation) |
Hello <World> A B C & D
Hello <World><br><br> A B<br> C & D
\n یا \r\n) با تگ استاندارد <br> جایگزین میشوند.#C را مشاهده میکنید:string rawText = "Hello <World>\nNew Line";
string safeHtml = WebUtility.HtmlEncode(rawText)
.Replace("\r\n", "<br>")
.Replace("\n", "<br>");HtmlEncode، اقدام به جایگزینی خطوط با تگ <br> نکنید. اگر متن ورودی حاوی کدهای مخرب جاوااسکریپت یا تگهای HTML باشد، تغییرات زودهنگام ممکن است فیلترهای امنیتی را دور زده و برنامه شما را در معرض حملات Cross-Site Scripting (XSS) قرار دهد. همواره ابتدا متن را کاملاً امن (Encode) کرده و سپس تگهای کنترلشده خود را به آن اضافه کنید.white-space در CSS استفاده کنید.white-space: pre-wrap; را اختصاص دهید، مرورگر به صورت خودکار تمام شکستگیهای خطوط (\n)، تبها و فاصلههای متوالی را دقیقاً همانطور که در متن اصلی بودهاند رندر میکند؛ بدون اینکه نیاز باشد شما در سمت سرور به صورت دستی رشته را با تگهای متعددی دستکاری کنید!// سمت سرور: فقط انکود کاراکترهای خاص برای امنیت string htmlResult = WebUtility.HtmlEncode(userInput);
/* سمت کلاینت: حفظ خودکار ساختار متنی و شکست خطوط طولانی */
.text-container {
white-space: pre-wrap;
word-break: break-word;
}white-space: pre-wrap;، میتوانید کدی خوانا، بسیار امن و با کارایی بالا بنویسید که ساختار متنی کاربران را به بهترین شکل ممکن حفظ کند.