เครื่องมือข้อความและชีวิตประจำวัน · ชุดเครื่องมือข้อความ
วิธีที่เครื่องกำเนิดกระสุนพับสำเนียง: NFD อธิบายการสลายตัว
· มันทำงานอย่างไร
url-ทาก การแปลงข้อความ javascript
อธิบายว่าการแบ่งแยกตามรูปแบบบัญญัติของ Unicode แยกตัวอักษรฐานออกจากสำเนียงอย่างไร ดังนั้น 'Café Crème' จึงกลายเป็น cafe-creme แทนที่จะเป็น caf-cr-me และในกรณีที่การสลายตัวเพียงอย่างเดียวยังไม่เพียงพอ
caf-cr-me - บั๊กบั๊กทั่วไปที่ทำให้ชื่อเสียหาย และเหตุใดจึงเกิดขึ้น
รูทีนทากที่อ่อนแอสามารถเปลี่ยน `Café Crème` ให้เป็น `caf-cr-me` ได้ เมื่อลบอักขระทุกตัวที่อยู่นอกช่วง ASCII ที่แคบ สำเนียงที่มองเห็นได้จะหายไป แต่ตัวอักษรฐานด้านล่างหายไปพร้อมกับสำเนียงเหล่านั้น เหลือ URL ที่ไม่เหมือนกับชื่อบทความอีกต่อไป ความเสียหายดังกล่าวเห็นได้ชัดเจนในชื่อ สถานที่ และหมวดหมู่บทบรรณาธิการที่ซ้ำกัน
ToolAcre ใช้เส้นทางอื่นใน `slugify` ขั้นแรกจะทำให้อินพุตเป็นมาตรฐาน จากนั้นจะลบช่วงของเครื่องหมายรวมที่ระบุโดยยังคงรักษาตัวอักษรผลลัพธ์ไว้ หลังจากนั้นจะพิมพ์ตัวคั่นข้อความและรูปร่างให้เล็กลง ลำดับคือเหตุผลที่ `Café Crème` กลายเป็น `cafe-creme` แทนที่จะเป็นส่วนที่มีสระหายไป
อักขระหนึ่งตัว การนำเสนอสองตัว - é สามารถเป็นจุดรหัสเดียวหรือ e ตามด้วยสำเนียงเฉียบพลันที่รวมกันได้อย่างไร
ข้อความที่มีลักษณะเหมือนกันอาจมีลำดับภายในที่แตกต่างกันได้ `é` อาจมาในรูปแบบอักขระที่เขียนไว้ล่วงหน้าหนึ่งตัว หรือเป็น `e` ธรรมดา ตามด้วยเครื่องหมายเฉียบพลันแบบรวม โดยปกติแล้วโปรแกรมแก้ไขเนื้อหาจะไม่เห็นว่าการนำเสนอใดมาจาก CMS เอกสาร หรือคลิปบอร์ด แต่ตัวกรองแบบอักขระต่ออักขระสามารถปฏิบัติต่ออินพุตทั้งสองแตกต่างกันได้
ความแตกต่างที่ซ่อนอยู่นั้นมีความสำคัญเมื่อกฎการแทนที่จดจำรูปแบบหนึ่ง แต่ไม่ใช่อีกรูปแบบหนึ่ง ToolAcre หลีกเลี่ยงการเขียนการแทนที่แยกกันสำหรับการสะกดคำที่เขียนไว้ล่วงหน้าแต่ละรายการ การทำให้เป็นมาตรฐานทำให้ไปป์ไลน์ทากมีรูปแบบระดับกลางที่สอดคล้องกันมากขึ้น ดังนั้นจึงสามารถลบเครื่องหมายเน้นเสียงที่รองรับออกได้ในขั้นตอนต่อมา ในขณะที่ตัวอักษรฐานยังคงอยู่สำหรับ URL
แบบฟอร์มการทำให้เป็นมาตรฐาน D - วิธีที่การสลายตัวของ Canonical จะเขียนตัวอักษรที่เน้นเสียงทุกตัวใหม่ให้เป็นตัวอักษรฐานบวกกับเครื่องหมายรวม
การใช้งานจะเรียก `.normalize("NFD")` ก่อนการทำงานของตัวพิมพ์เล็กหรือตัวคั่น สำหรับอักขระที่มีการแบ่งแยกตามรูปแบบบัญญัติที่จัดการโดยรันไทม์ JavaScript สิ่งนี้จะสร้างอักขระพื้นฐานตามด้วยเครื่องหมายรวมอย่างน้อยหนึ่งเครื่องหมาย ฟังก์ชันนี้ไม่มีแค็ตตาล็อกการสะกดภาษาฝรั่งเศสหรือสเปนของตัวเอง และไม่ตรวจสอบคำตามความหมาย
โครงร่างระบุว่า NFD เขียนตัวอักษรเน้นเสียงทุกตัวใหม่ แต่แหล่งที่มาสนับสนุนคำสั่งที่แคบกว่า การสลายตัวขึ้นอยู่กับอักขระ และนิพจน์การลบต่อไปนี้ครอบคลุมจุดโค้ดตั้งแต่ `U+0300` ถึง `U+036F` บทความนี้จึงควรอธิบายพฤติกรรมที่แสดงโดยโค้ด แทนที่จะสัญญาว่าจะลบสำเนียงสากลสำหรับทุกสคริปต์หรือเครื่องหมาย
NFD แยกย่อยอักขระที่รองรับ การใช้งานไม่ได้รับประกันว่าตัวอักษรเน้นเสียงทุกตัวจะแยกจากกัน
หลังการทำให้เป็นมาตรฐาน `slugify` ใช้ `/[̀-ͯ]/g` และแทนที่เครื่องหมายที่ตรงกันแต่ละรายการด้วยสตริงว่าง ในรูปแบบสลายตัวของ `é` นั้น `e` ไม่ตรงกับช่วงนั้น ในขณะที่เครื่องหมายเฉียบพลันเกิดขึ้น การลบเฉพาะเครื่องหมายออกจะเหลือตัวอักษรฐานที่อ่านได้ ซึ่งวิธี ASCII-only ก่อนหน้านี้จะถูกละทิ้งไป
นี่คือการพับสำเนียง ไม่ใช่รหัสผ่านการล้างข้อความทั่วไป นิพจน์ทั่วไปถูกจงใจวางไว้หน้ากฎสำหรับตัวคั่น โดยอนุญาตให้ใช้อักษรฐานเป็นตัวอักษรในภายหลัง หากการลบเครื่องหมายเกิดขึ้นหลังจากการรันที่ไม่ได้รับการสนับสนุนได้พังทลายลงแล้ว เครื่องหมายที่สลายตัวอาจส่งผลต่อการวางตัวคั่นและทำให้เกิดกระสุนที่ซื่อสัตย์น้อยลง
ส่วนที่เหลือของไปป์ไลน์ทาก - ตัวพิมพ์เล็ก, การยุบการวิ่งที่ไม่ใช่ตัวอักษรและตัวเลขไปยังยัติภังค์เดี่ยว, การตัดตัวคั่นที่นำหน้าและต่อท้าย, วางอิโมจิ
ไปป์ไลน์ที่เหลือจะพิมพ์ข้อความมาตรฐานให้เล็กลง และแทนที่การเรียกใช้แต่ละครั้งที่ไม่ใช่ตัวอักษรหรือตัวเลข Unicode ด้วยตัวคั่นที่กำหนดค่าไว้ ซึ่งมีค่าเริ่มต้นเป็นยัติภังค์ นิพจน์ที่สองจะเล็มตัวคั่นที่ซ้ำกันจากปลายทั้งสองข้าง อิโมจิและเครื่องหมายวรรคตอนจึงหายไปเป็นเนื้อหา ในขณะที่อักขระที่ไม่รองรับที่อยู่ติดกันจะกลายเป็นขอบเขตเดียวแทนที่จะเป็นยัติภังค์หลายตัว
โครงร่างอธิบายการยุบที่ไม่ใช่ตัวอักษรและตัวเลข แต่รูปแบบจริงใช้การหลีกคุณสมบัติ Unicode ไม่ใช่ตัวอักษร ASCII เท่านั้น ตัวอักษรจากสคริปต์ที่ไม่ใช่ภาษาละตินสามารถยังคงอยู่ในตัวบุ้งได้หลังจากใช้ตัวพิมพ์เล็ก การกำหนดค่ายืนยันว่าไม่มีขั้นตอนการทับศัพท์: สัญลักษณ์จะถูกลบออก แต่ตัวอักษรที่เก็บไว้จะไม่ถูกเขียนใหม่เป็นการสะกดภาษาละตินโดยประมาณโดยอัตโนมัติ
ส่วนที่เหลือของไปป์ไลน์ทากนี้จะเก็บตัวอักษรและตัวเลขจากสคริปต์ใดๆ ในขณะที่แทนที่การรันอื่นๆ ด้วยตัวคั่นที่เลือก
ติดตาม `Café Crème & Co. — Été 2024!` ตลอดการใช้งาน NFD แยกอักขระเน้นเสียงที่รองรับออกเป็นตัวอักษรฐานและเครื่องหมาย นิพจน์การลบเครื่องหมายออกจาก `Cafe Creme & Co. — Ete 2024!` และตัวพิมพ์เล็กจะสร้าง `cafe creme & co. — ete 2024!` ก่อนประมวลผลเครื่องหมายวรรคตอน
การเรียกใช้ที่ไม่ใช่ตัวอักษรและไม่ใช่ตัวเลขจะกลายเป็นยัติภังค์ โดยให้ลำดับที่มีความหมาย `cafe-creme-co-ete-2024` หลังจากตัดตัวคั่นที่นำหน้าและต่อท้ายออกแล้ว เครื่องหมายอัศเจรีย์ จุดเต็ม ขีดกลาง และเครื่องหมายอัศเจรีย์จะไม่รับชื่อที่พูดหรือการแทนที่แบบกำหนดเอง โดยทำหน้าที่เป็นขอบเขตระหว่างการเรียกใช้ตัวอักษรและตัวเลขในการแปลงนี้เท่านั้น
สิ่งที่การสลายตัวไม่สามารถทำได้ - ตัวอักษรเช่น ø, ł, ß และ æ ไม่มีสำเนียงที่จะตัดออกและจำเป็นต้องมีตารางการทับศัพท์
การสลายตัวไม่ใช่การทับศัพท์ อักขระเช่น `ø`, `ł`, `ß` และ `æ` ยังคงเป็นตัวอักษร Unicode หลังจากไปป์ไลน์นี้ ดังนั้นตัวกรองตามคุณสมบัติจะเก็บไว้แทนที่จะดูตารางสำหรับ `o`, `l`, `ss` หรือ `ae` การอ้างว่าผู้ใช้ต้องการตารางการทับศัพท์อาจเป็นคำแนะนำในการออกแบบที่เป็นประโยชน์ในที่อื่น แต่ไม่มีตารางดังกล่าวอยู่ในเครื่องมือนี้
ความแตกต่างนั้นยังอธิบายด้วยว่าเหตุใดผลลัพธ์อาจเป็นตัวบุ้งโครงการที่ถูกต้องโดยไม่ต้อง ASCII-เท่านั้น ผู้แก้ไขที่ระบบการเผยแพร่ต้องการ ASCII ควรตรวจสอบข้อจำกัดของระบบที่แยกจากกันก่อนใช้เอาต์พุต ToolAcre สัญญาว่าจะพับสำเนียงสำหรับช่วงการสลายตัวและเครื่องหมายที่นำไปใช้ ไม่รับประกันการสะกดตามภาษา การแปลงแบบย้อนกลับ หรือเอาต์พุตภาษาละตินสำหรับทุกชื่อเรื่อง
อักขระที่ไม่มีเครื่องหมายที่ถอดออกได้ยังคงเป็นตัวอักษร เครื่องมือนี้ไม่มีตารางการทับศัพท์
การนำออกที่เชื่อถือได้นั้นเป็นขั้นตอน: ทำให้เป็นมาตรฐานก่อน ลบเครื่องหมายรวมที่รองรับ ตัวพิมพ์เล็ก ยุบการวิ่งที่ไม่รองรับ และตัวแยกขอบ แต่ละขั้นตอนมีความรับผิดชอบที่มองเห็นได้เพียงอย่างเดียว และลำดับจะคงตัวอักษรพื้นฐานไว้ก่อนที่จะละทิ้งเครื่องหมายวรรคตอน นั่นก็เพียงพอแล้วที่จะป้องกันความล้มเหลว `caf-cr-me` ทั่วไปโดยไม่ต้องสร้างกฎภาษาที่แหล่งที่มาไม่มี
วางชื่อที่ทำงานลงในตัวแปลงตัวพิมพ์ข้อความและเลือกตัวเลือกกระสุนเพื่อตรวจสอบผลลัพธ์สุดท้ายในกล่องข้อความเดียวกัน หากชื่อเรื่องมีตัวอักษรอยู่นอกตัวพิมพ์เน้นเสียงที่แสดง ให้ตรวจสอบผลลัพธ์เทียบกับแพลตฟอร์มปลายทาง ตัวแปลงให้การแปลงฝั่งเบราว์เซอร์ที่คาดเดาได้ ในขณะที่ตัวแก้ไขยังคงรับผิดชอบแบบแผนเส้นทาง