0Pricing
JavaScript Academy · บทเรียน

กรณีใช้งานแม่แบบติดแท็กจริง

สร้าง HTML ที่ปลอดภัยและข้อความที่จัดรูปแบบด้วยแท็ก

กรณีใช้งานแม่แบบติดแท็กจริง เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

แท็กในโลกจริง

แม่แบบที่มีแท็กเป็นพื้นฐานของไลบรารีมากมาย เช่น การหลีกอักขระ HTML, คอมโพเนนต์ที่มีรูปแบบ, คำสั่ง GraphQL และการปรับให้เข้ากับภาษาต่าง ๆ แนวคิดร่วมกันคือการดักรับค่าที่แทรกเพื่อประมวลผลอย่างปลอดภัย

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

ปัญหาการหลีกอักขระ

เมื่อสร้าง HTML จากข้อมูลนำเข้าของผู้ใช้ อักขระพิเศษอย่างเครื่องหมายเล็กกว่าสามารถแทรกมาร์กอัปได้ ฟังก์ชันแท็กสามารถหลีกอักขระเหล่านี้โดยอัตโนมัติ เฉพาะในค่าที่แทรกเท่านั้น

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 ที่ปลอดภัย

ตอนนี้เราจะสร้างแท็กที่หลีกอักขระในค่าที่แทรกทุกค่า แต่ปล่อยส่วนคงที่ของแม่แบบไว้ตามเดิม เนื่องจากส่วนเหล่านั้นมาจากผู้พัฒนาที่เชื่อถือได้

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>"))

เหตุผลที่ส่วนคงที่ยังเป็นข้อความดิบ

มีเพียงค่าที่แทรกเท่านั้นที่เป็นข้อมูลผู้ใช้ซึ่งไม่น่าเชื่อถือ ส่วนแม่แบบตามตัวอักษรถูกเขียนโดยผู้พัฒนา จึงไม่ต้องหลีกอักขระ เพื่อให้มาร์กอัปที่ตั้งใจไว้ยังทำงานได้

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>"))

แท็กผลลัพธ์ที่จัดรูปแบบ

อีกรูปแบบหนึ่งคือการครอบค่าที่แทรกด้วยเครื่องหมายจัดรูปแบบ เช่น เพื่อเน้นตัวเลขในรายงาน

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))

การสร้างสตริงแบบสอบถาม

แท็กสามารถเข้ารหัสค่าสำหรับที่อยู่เว็บ โดยหลีกอักขระในแต่ละส่วนที่แทรก เพื่อให้โครงสร้างคงที่ไม่เปลี่ยนแปลงขณะที่ข้อมูลถูกเข้ารหัสอย่างปลอดภัย

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"))

กรณีที่ไม่ควรใช้แท็ก

สำหรับสตริงง่าย ๆ แม่แบบตามตัวอักษรธรรมดาก็เพียงพอแล้ว ควรใช้ฟังก์ชันแท็กเมื่อจำเป็นต้องแปลงค่าที่แทรกอย่างสม่ำเสมอเท่านั้น เช่น เพื่อหลีกอักขระหรือปรับให้เข้ากับภาษา

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

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความรู้เชิงปฏิบัติเกี่ยวกับแท็กของคุณ

ทบทวน

ทบทวน: แม่แบบที่มีแท็กช่วยให้สร้างผลลัพธ์ที่ปลอดภัยและจัดรูปแบบแล้ว

  • หลีกอักขระเฉพาะค่าที่แทรกเพื่อความปลอดภัยของ HTML
  • ส่วนคงที่ยังเป็นส่วนที่เชื่อถือได้และเป็นข้อความดิบ
  • ใช้แท็กสำหรับการจัดรูปแบบ การเข้ารหัส และการผันรูปเอกพจน์พหูพจน์
  • เลือกใช้แม่แบบตามตัวอักษรธรรมดาเมื่อไม่จำเป็นต้องแปลงข้อมูล
function safe(s, v) { return s[0] + String(v).replace(/</g, "&lt;") }
console.log(safe(["x="], "<a>"))

คำถามที่พบบ่อย

บทเรียน “กรณีใช้งานแม่แบบติดแท็กจริง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “กรณีใช้งานแม่แบบติดแท็กจริง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส JavaScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “กรณีใช้งานแม่แบบติดแท็กจริง”

สร้าง HTML ที่ปลอดภัยและข้อความที่จัดรูปแบบด้วยแท็ก คุณปฏิบัติ JavaScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน JavaScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน JavaScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “กรณีใช้งานแม่แบบติดแท็กจริง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน JavaScript Academy นี้ได้ไหม

ได้ บทเรียน JavaScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐานการแทรกข้อความ
  2. ข้อความหลายบรรทัด
  3. ฟังก์ชันแม่แบบติดแท็ก
  4. กรณีใช้งานแม่แบบติดแท็กจริง
← กลับไปที่ JavaScript Academy