Rich text editor — foydalanuvchiga matnni qalin, kursiv, sarlavha, ro‘yxat, havola, jadval yoki rasm bilan formatlash imkonini beruvchi tahrirlash komponenti. Oddiy textarea faqat xom matn qabul qilsa, rich text editor ichki document modelini HTML, Markdown, JSON daraxti yoki boshqa formatda saqlashi mumkin. Tahrirlash interfeysi va saqlanadigan format bir xil tushuncha emas.
Tahrirlash modeli
Brauzerga asoslangan editor contenteditable elementidan yoki maxsus virtual document modeldan foydalanadi. contenteditable browser buyruqlari va DOM mutatsiyasiga tayanadi, lekin browserlar orasidagi farq hamda murakkab selection holatlari muammo tug‘diradi. Zamonaviy editorlar paragraph, text node, mark va block kabi schema asosidagi modelni yuritib, DOMni ko‘rinish sifatida boshqaradi.
Operatsiya, masalan “5-pozitsiyadan 3 belgi o‘chir” yoki “tanlangan matnga bold mark qo‘sh”, undo/redo tarixida saqlanadi. IME orqali Sharqiy Osiyo yozuvi, mobile keyboard, bidirectional text va screen reader bilan ishlash oddiy keypress logikasidan murakkabroq. Editor composition eventlarini va selectionni yo‘qotmasligi kerak.
Saqlash formatlari
HTML format browserda bevosita render qilishga yaqin, ammo sanitization va turli editor versiyalaridagi markupni boshqarish talab etiladi. Markdown ixcham va diff uchun qulay, lekin jadval, rang yoki murakkab embed uchun dialect kengaytmasiga muhtoj. Strukturali JSON document schema semantik tugunlarni aniq saqlaydi, ammo boshqa tizimga export qilish converter talab qiladi.
Format versiyalanadi. Editor yangilanganda eski hujjat migratsiyasi deterministik bo‘lishi kerak. Faqat render qilingan HTMLni saqlash keyinchalik semantik ma’lumotni yo‘qotishi mumkin; faqat ichki JSONni saqlash esa editor kutubxonasiga qattiq bog‘laydi. Ayrim tizimlar canonical source va cache qilingan sanitized HTMLni alohida saqlaydi.
XSS va sanitization
Paste orqali foydalanuvchi boshqa sayt yoki ofis dasturidan murakkab HTML olib kiradi. Editor toolbarida script tugmasi bo‘lmasa ham, clipboard <script>, event handler, javascript: URL, SVG yoki style payload olib kelishi mumkin. Client sanitization UX uchun foydali, ammo server saqlash yoki render oldidan mustaqil sanitization qiladi.
Allowlist qaysi teg, atribut, URL scheme va CSS xususiyatiga ruxsat berilishini belgilaydi. HTML regex bilan tozalanmaydi; browserga mos parser va sinovdan o‘tgan sanitizer ishlatiladi. Link href qiymati URL sifatida parse qilinadi, tashqi link uchun rel="noopener noreferrer" kabi siyosat qo‘llanishi mumkin. Rasm proxy orqali o‘tkazilsa, SSRF va maxfiylik talablari hisobga olinadi.
Sanitized HTMLni keyin template oddiy matn sifatida escape qilsa markup ko‘rinmaydi. Uni “safe HTML” sifatida render qilish faqat sanitizer chiqishiga nisbatan ruxsat etiladi. Sanitizer qoidasi yangilanganda oldin saqlangan kontent qayta sanitizatsiya qilinishi yoki render paytida joriy siyosatdan o‘tishi mumkin.
Media va embed
Rasm upload editorning o‘z serveriga alohida authenticated endpoint orqali yuboriladi. Fayl turi magic bytes, dekoder va o‘lcham bilan tekshiriladi; yangi xavfsiz filename yaratiladi. Rasm metadata’sidagi geolocation olib tashlanishi mumkin. Upload tugamasdan yaratilgan vaqtinchalik placeholder va keyingi failure document modelda to‘g‘ri boshqariladi.
YouTube yoki boshqa embed xom iframe HTML sifatida qabul qilinmaydi. Foydalanuvchi URL beradi, server allowlist provider IDni ajratib, o‘zi nazorat qiladigan iframe template yaratadi. Sandbox, allow, referrer policy va lazy loading shu template’da belgilanadi.
Hamkorlik va versiyalar
Birgalikda tahrirlashda Operational Transformation yoki CRDT parallel o‘zgarishlarni birlashtiradi. Bu algoritmlar matn pozitsiyasi, selection va offline editlarni muvofiqlashtiradi. Ular authorizationni hal qilmaydi; har operatsiya documentga yozish ruxsatidan o‘tadi va server client yuborgan tayyor HTMLga ishonmaydi.
Autosave versiya raqami yoki ETag bilan conflictni aniqlaydi. Ikki tabdan eski nusxa yuborilganda so‘nggi yozuvni jim bosib ketish o‘rniga merge yoki conflict ko‘rsatiladi. Revision history muallif, vaqt va o‘zgarishni saqlaydi; maxfiy o‘chirilgan ma’lumot tarixda qolishi mumkinligi retention siyosatida hisobga olinadi.
Bog‘liq tushunchalar
contenteditable, HTML sanitization, Markdown, Document model, Cross-Site Scripting, CRDT, WYSIWYG