0Pricing
JavaScript Academy · درس

حالات استخدام عملية للقوالب الموسومة

أنشئوا HTML وسلاسل نصية منسّقة وآمنة باستخدام الوسوم.

حالات استخدام عملية للقوالب الموسومة درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 4 دروس في المجموع.

دوال الوسم في العالم الحقيقي

تدعم القوالب الموسومة العديد من المكتبات، مثل تهريب HTML، وstyled components، واستعلامات GraphQL، وi18n. والفكرة المشتركة هي اعتراض القيم interpolated لمعالجتها بأمان.

function tag(s, ...v) { return s[0] + v[0] + s[1] }
console.log(tag(["<", ">"], "b"))

مشكلة التهريب

عند إنشاء HTML من مدخلات المستخدم، يمكن لأحرف خاصة مثل علامة أصغر من أن تحقن ترميزًا. ويمكن لدالة الوسم تهريب هذه الأحرف تلقائيًا، ولكن في القيم interpolated فقط.

const danger = "<script>"
console.log("raw: " + danger)

مساعد للتهريب

نعرّف أولًا مساعدًا يستبدل الأحرف الخطرة بكيانات HTML آمنة.

function escapeHtml(str) {
  return String(str)
    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;")
}
console.log(escapeHtml("<b>"))

وسم HTML آمن

نبني الآن وسمًا يهرب كل قيمة interpolated، لكنه يترك أجزاء القالب الثابتة كما هي، لأنها تأتي من المطوّر الموثوق.

function escapeHtml(str) {
  return String(str).replace(/</g, "&lt;").replace(/>/g, "&gt;")
}
function safe(strings, ...values) {
  let out = ""
  strings.forEach(function (s, i) {
    out += s + (values[i] !== undefined ? escapeHtml(values[i]) : "")
  })
  return out
}
console.log(safe(["<p>", "</p>"], "<script>"))

لماذا تبقى الأجزاء الثابتة دون تهريب

القيم interpolated وحدها هي بيانات المستخدم غير الموثوقة. أما أجزاء القالب الحرفية فيكتبها المطوّر، ولذلك تبقى دون تهريب حتى يستمر الترميز المقصود في العمل.

function safe(strings, ...values) {
  let out = ""
  strings.forEach(function (s, i) {
    const safer = values[i] !== undefined ? String(values[i]).replace(/</g, "&lt;") : ""
    out += s + safer
  })
  return out
}
console.log(safe(["<b>", "</b>"], "<i>x</i>"))

وسم المخرجات المنسقة

من الأنماط الأخرى إحاطة القيم interpolated بعلامات تنسيق، مثل تمييز الأرقام في تقرير.

function money(strings, ...values) {
  let out = ""
  strings.forEach(function (s, i) {
    out += s + (values[i] !== undefined ? "$" + Number(values[i]).toFixed(2) : "")
  })
  return out
}
console.log(money(["Total: ", ""], 9.5))

بناء سلاسل الاستعلام

يمكن للوسوم ترميز القيم لعناوين URL، مع تهريب كل جزء interpolated بحيث تبقى البنية الثابتة سليمة، بينما تُرمّز البيانات بأمان.

function url(strings, ...values) {
  let out = ""
  strings.forEach(function (s, i) {
    out += s + (values[i] !== undefined ? encodeURIComponent(values[i]) : "")
  })
  return out
}
console.log(url(["/search?q=", ""], "a b&c"))

التصريف

يمكن للوسم فحص قيمة وتعديل النص المحيط بها، مثل اختيار صيغة المفرد أو الجمع.

function plural(strings, count) {
  const noun = count === 1 ? "item" : "items"
  return strings[0] + count + " " + noun
}
console.log(plural(["You have "], 1))
console.log(plural(["You have "], 3))

إزالة المسافات البادئة

يمكن للوسوم تنظيف القوالب متعددة الأسطر بإزالة المسافات البادئة من كل سطر، لإنتاج مخرجات مرتبة.

function dedent(strings) {
  return strings[0].split("\n").map(function (l) { return l.trim() }).join("\n")
}
console.log(dedent(["  a\n  b\n  c"]))

تركيب دوال الوسم

يمكنكم تكديس السلوكيات بجعل وسم يستدعي دوال مساعدة. في هذا المثال، يحيط الوسم بالقيم ويبرزها في الوقت نفسه.

function emph(strings, ...values) {
  let out = ""
  strings.forEach(function (s, i) {
    const v = values[i] !== undefined ? "**" + values[i] + "**" : ""
    out += s + v
  })
  return out
}
console.log(emph(["Note: ", "!"], "important"))

متى لا نستخدم دوال الوسم

تكفي القوالب الحرفية العادية للسلاسل البسيطة. استخدموا دالة وسم فقط عندما تحتاجون إلى تحويل متسق للقيم interpolated، مثل التهريب أو التوطين.

const name = "Lee"
console.log("Welcome, " + name)

اختبار سريع

اختبروا معرفتكم العملية بدوال الوسم.

مراجعة

مراجعة: تتيح القوالب الموسومة إنشاء مخرجات آمنة ومنسقة.

  • اهربوا القيم interpolated فقط لضمان أمان HTML
  • تبقى الأجزاء الثابتة موثوقة ودون تهريب
  • استخدموا الوسوم للتنسيق والترميز والتصريف
  • فضّلوا القوالب الحرفية العادية عندما لا تكون هناك حاجة إلى تحويل
function safe(s, v) { return s[0] + String(v).replace(/</g, "&lt;") }
console.log(safe(["x="], "<a>"))

الأسئلة الشائعة

هل درس «حالات استخدام عملية للقوالب الموسومة» مجاني؟

نعم — نص درس «حالات استخدام عملية للقوالب الموسومة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «حالات استخدام عملية للقوالب الموسومة»؟

أنشئوا HTML وسلاسل نصية منسّقة وآمنة باستخدام الوسوم. تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟

لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «حالات استخدام عملية للقوالب الموسومة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟

نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات استيفاء السلاسل النصية
  2. السلاسل النصية متعددة الأسطر
  3. دوال القوالب الموسومة
  4. حالات استخدام عملية للقوالب الموسومة
← العودة إلى JavaScript Academy