ฉันมีคำถามเกี่ยวกับการแสดงคำตอบ ฉันสังเกตเห็นว่าโค้ด HTML จำนวนมากดูเหมือนจะทำงานในหน้าตัวอย่างของคำตอบ แต่ไม่ปรากฏคำตอบสุดท้าย เหตุใดสิ่งเหล่านี้จึงถูกบล็อก

ฉันมีคำถามเกี่ยวกับการแสดงคำตอบ ฉันสังเกตเห็นว่าโค้ด HTML จำนวนมากดูเหมือนจะทำงานในหน้าตัวอย่างของคำตอบ แต่ไม่ปรากฏคำตอบสุดท้าย เหตุใดสิ่งเหล่านี้จึงถูกบล็อก
Anonim

คำตอบสั้น ๆ คือเราใช้ห้องสมุด Markdown ที่แตกต่างกันสองแห่งเพื่อแสดงตัวอย่างและคำตอบสุดท้าย ทั้งสองไลบรารีที่แตกต่างกันปฏิบัติกับ HTML ต่างกัน

คำตอบของเราถูกออกแบบและจัดรูปแบบโดยใช้ภาษามาร์กอัปที่เรียกว่า "Markdown" Markdown จะแปลงมาร์กอัปที่กำหนดไว้ล่วงหน้าเป็น HTML สำหรับลิงก์รูปภาพส่วนหัวตัวเอียงตัวเอียง ฯลฯ

ตัวอย่างคำตอบของเราถูกสร้างขึ้นในเบราว์เซอร์โดยใช้ห้องสมุด Javascript เราทำสิ่งนี้ด้วยเหตุผลเรื่องความเร็ว

เมื่อคุณรีเฟรชหน้านี้คำตอบจะถูกแปลงเป็น HTML โดยใช้ห้องสมุด Python Markdown ของเรา เราทำเช่นนี้เพราะเราต้องการคำตอบให้ดูดีทันทีที่คุณไปถึงหน้าเว็บ หากเราตัดสินใจที่จะส่งออกคำตอบแบบดิบแล้วแปลงมันโดยใช้ห้องสมุด Javascript ของเราคุณจะสังเกตเห็นคำตอบแบบดิบที่ "น่าเกลียด" ก่อนแล้วจึงข้ามไปยังเวอร์ชันที่จัดรูปแบบเรียบร้อย นั่นไม่เลวร้ายนัก แต่ปัญหาคือ Google และบอทอื่น ๆ ที่รวบรวมข้อมูลเว็บไซต์ของเราเพื่อการค้นหาไม่เรียกใช้ Javascript บอทเหล่านั้นจะเห็นคำตอบแบบดิบ ๆ ที่น่าเกลียดซึ่งอาจส่งผลเสียต่ออันดับการค้นหาของเรา

ทีนี้ทำไมไลบรารีทั้งสองนี้จึงใช้รหัส HTML ต่างกันล่ะ ห้องสมุดไพ ธ อนรับผิดชอบคำตอบสุดท้าย "หนี" HTML ซึ่งหมายความว่าใช้รหัส HTML เหล่านั้นและเปลี่ยนเป็นข้อความที่ไม่เป็นอันตราย ฉันพูดไม่เป็นอันตรายเพราะคุณสามารถจินตนาการว่าการอนุญาตให้ผู้ใช้ป้อน HTML ในหน้าของเราสามารถทำลายเค้าโครงของหน้าเว็บได้อย่างสมบูรณ์ ไลบรารี Javascript ที่รับผิดชอบในการแสดงตัวอย่างจะไม่หนี HTML ซึ่งเป็นข้อบกพร่องทางเทคนิค

ในอนาคตเราจะต้องลบความสามารถของไลบรารี Javascript เพื่อแสดงตัวอย่างโค้ด HTML เพื่อเหตุผลด้านความปลอดภัย นอกจากนี้เราจะย้ายไปใช้ไลบรารีเดียวเพื่อแสดงข้อความ Markdown ทั้งหมดของเรา