ตัวแยกวิเคราะห์ Markdown ที่ดีขึ้นใน PHP — การสาธิต
ติดตั้งแพ็คเกจผู้แต่ง:
composer require erusev/parsedown
หรือดาวน์โหลดรุ่นล่าสุดและรวม Parsedown.php
$ Parsedown = new Parsedown ();
echo $ Parsedown -> text ( ' Hello _Parsedown_! ' ); # prints : < p > Hello < em > Parsedown </ em >!</ p >
คุณยังสามารถแยกวิเคราะห์มาร์กดาวน์แบบอินไลน์ได้เท่านั้น:
echo $ Parsedown -> line ( ' Hello _Parsedown_! ' ); # prints : Hello < em > Parsedown </ em >!
ตัวอย่างเพิ่มเติมในวิกิและในวิดีโอสอนนี้
Parsedown สามารถหลีกเลี่ยงอินพุตของผู้ใช้ภายใน HTML ที่สร้างขึ้นได้ นอกจากนี้ Parsedown จะใช้การฆ่าเชื้อกับเวกเตอร์สคริปต์เพิ่มเติม (เช่น ปลายทางลิงก์สคริปต์) ที่แนะนำโดยไวยากรณ์มาร์กดาวน์เอง
หากต้องการบอก Parsedown ว่ากำลังประมวลผลอินพุตของผู้ใช้ที่ไม่น่าเชื่อถือ ให้ใช้ดังต่อไปนี้:
$ Parsedown -> setSafeMode ( true );
หากคุณต้องการอนุญาต HTML จากการป้อนข้อมูลของผู้ใช้ที่ไม่น่าเชื่อถือ แต่ยังต้องการให้เอาต์พุตเป็นอิสระจาก XSS ขอแนะนำให้คุณใช้ตัวล้าง HTML ที่อนุญาตให้แท็ก HTML อยู่ในรายการที่อนุญาตพิเศษ เช่น HTML Purifier
ในทั้งสองกรณี คุณควรพิจารณาใช้มาตรการป้องกันในเชิงลึกอย่างจริงจัง เช่น การปรับใช้นโยบายความปลอดภัยเนื้อหา (คุณลักษณะความปลอดภัยของเบราว์เซอร์) เพื่อให้เพจของคุณมีแนวโน้มที่จะปลอดภัย แม้ว่าผู้โจมตีจะพบช่องโหว่ในหนึ่งในสิ่งแรกๆ แนวป้องกันด้านบน
เซฟโหมดไม่จำเป็นต้องให้ผลลัพธ์ที่ปลอดภัยเมื่อใช้ส่วนขยายในการแยกวิเคราะห์ ส่วนขยายควรได้รับการประเมินด้วยตนเองเพื่อพิจารณาความปลอดภัยเฉพาะต่อ XSS
คำเตือน: วิธีนี้ไม่ปลอดภัยจาก XSS!
หากคุณต้องการหลีกเลี่ยง HTML ในอินพุตที่เชื่อถือได้ คุณสามารถใช้สิ่งต่อไปนี้:
$ Parsedown -> setMarkupEscaped ( true );
โปรดทราบว่าการทำเช่นนี้ยังอนุญาตให้ผู้ใช้แทรกเวกเตอร์สคริปต์ที่ไม่ปลอดภัย เช่น [xss](javascript:alert%281%29)
พาร์สดาวน์ทำงานอย่างไร?
มันพยายามอ่าน Markdown เหมือนมนุษย์ ขั้นแรกให้ดูที่เส้น สนใจว่าเส้นเริ่มต้นอย่างไร ซึ่งจะช่วยให้จดจำบล็อกได้ ตัวอย่างเช่น ระบบรู้ว่าหากบรรทัดขึ้นต้นด้วย a -
แสดงว่าอาจเป็นของรายการก็ได้ เมื่อตรวจพบบล็อกแล้ว ระบบจะดำเนินการต่อไปยังเนื้อหา ขณะอ่านจะคอยระวังอักขระพิเศษ ซึ่งจะช่วยให้จดจำองค์ประกอบแบบอินไลน์ (หรืออินไลน์)
เราเรียกแนวทางนี้ว่า "แบบเส้น" เราเชื่อว่า Parsedown เป็นตัวแยกวิเคราะห์ Markdown ตัวแรกที่ใช้ นับตั้งแต่เปิดตัว Parsedown นักพัฒนารายอื่นๆ ก็ใช้วิธีการเดียวกันในการพัฒนาตัวแยกวิเคราะห์ Markdown อื่นๆ ใน PHP และภาษาอื่นๆ
มันสอดคล้องกับ CommonMark หรือไม่?
ผ่านการทดสอบ CommonMark ส่วนใหญ่ การทดสอบส่วนใหญ่ที่ไม่ผ่านจะจัดการกับกรณีที่ค่อนข้างไม่ธรรมดา อย่างไรก็ตาม เมื่อ CommonMark เติบโต การปฏิบัติตามกฎระเบียบก็ควรปรับปรุง
ใครใช้มัน?
Laravel Framework, Bolt CMS, Grav CMS, Herbie CMS, Kirby CMS, CMS ตุลาคม, Pico CMS, Statamic CMS, phpDocumentor, RaspberryPi.org, Symfony Demo และอื่นๆ อีกมากมาย
ฉันจะช่วยได้อย่างไร?
ใช้มัน ติดดาว แบ่งปัน และหากคุณรู้สึกมีน้ำใจ ก็บริจาคได้
ฉันควรรู้อะไรอีกบ้าง?
ฉันยังสร้าง Nota ซึ่งเป็นแอปบันทึกย่อที่ออกแบบมาสำหรับไฟล์ Markdown ในเครื่องด้วย