ฉันต้องการสร้างกระสุนสำหรับสายบางอย่างโดยไม่ต้องผ่านการไหลของการสร้างกระสุน WordPress ดังนั้นฉันต้องการทราบว่าฟังก์ชั่นใดที่เรียกใช้เพื่อให้ได้กระสุนที่เรียบร้อย ฉันลอง sanitize_title () แต่ได้ผล% c2% a0
ฉันต้องการสร้างกระสุนสำหรับสายบางอย่างโดยไม่ต้องผ่านการไหลของการสร้างกระสุน WordPress ดังนั้นฉันต้องการทราบว่าฟังก์ชั่นใดที่เรียกใช้เพื่อให้ได้กระสุนที่เรียบร้อย ฉันลอง sanitize_title () แต่ได้ผล% c2% a0
คำตอบ:
คุณเกือบจะอยู่ที่นั่นแล้ว ฟังก์ชั่นที่คุณต้องการคือsanitize_title_with_dashes ($ title)
èäç
ฯลฯ จะอยู่กับฟังก์ชันนี้
sanitize_title_with_dashes
รวมทั้งsanitize_title
ปล่อยให้ตัวละครพิเศษบางอย่างที่อาจทำลายระบบบางอย่าง ฉันต้องการวิธีการที่เป็นสากลมากขึ้นในการลดสตริงลองดูsanitize_html_class
มีคำตอบอยู่แล้ว แต่ฉันต้องการขยายออกไปเล็กน้อยดังนั้นนี่คือข้อค้นพบของฉัน:
หากเรามีลักษณะที่wp_insert_post()
เราเห็นการ$post_name
ใช้งานที่ถูกสุขอนามัยwp_sanitize_title()
(ดูwp-includes/post.php
)
ในการทำงานเรามีตัวกรองsanitize_title()
sanitize_title
สิ่งนี้น่าสนใจเนื่องจากในตัวกรองเริ่มต้นsanitize_title_with_dashes()
จะติดอยู่ในตัวกรองนี้ (ดูwp-includes/default-filters.php
)
<?php
echo sanitize_title( 'Â+ÄÖßáèäç' ) // aaeoessaeaec
?>
ฉันลอง sanitize_title () แต่ได้ผล% c2% a0
ฟังดูแปลก ๆ มันจะเป็นการดีถ้าได้รู้คุณค่าของการป้อนข้อมูล แต่การติดตามwp_insert_post()
sanitize_title()
ดูเหมือนจะเพียงพอแล้ว
sanitize_title()
ดูเหมือนจะเป็นคนเดียวที่คุณต้องการ
ใน wp-include / default-filters.php บรรทัด 211 คุณจะพบ:
add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3);
ซึ่งหมายความว่าการโทรsanitize_title()
จะลบอักขระพิเศษทั้งหมดก่อนจากนั้นจึงใช้sanitize_title
ตัวกรองซึ่งเป็นการเรียกsanitize_title_with_dashes()
@JHoffmann ชี้ให้เห็นเพียงแค่การโทรsanitize_title_with_dashes()
จะไม่ลบอักขระพิเศษ
นอกจากคำตอบที่ยอดเยี่ยมของ websupporter ฉันพบด้านล่าง:
ขึ้นอยู่กับการใช้งานของคุณมันจะขึ้นอยู่กับสิ่งที่คุณต้องการ
sanitize_title()
ตามที่พูดว่า:
สำเนียงจะถูกลบออก (ตัวอักษรเน้นเสียงจะถูกแทนที่ด้วยการเทียบเท่าที่ไม่เน้นเสียง)
... และsanitize_title_with_dashes
พูดว่า:
โปรดทราบว่ามันไม่ได้แทนที่อักขระเน้นเสียงพิเศษ
ดังนั้นด้วยสตริงตัวอย่างนี้:Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç
sanitize_title()
ผลลัพธ์:
AA-o-SA-% 20-OO-PP -_- EAC
ตามที่คุณเห็นว่ามันได้แทนที่อักขระที่เน้นเสียงด้วยการเทียบเท่าที่ไม่ได้เน้นเสียงและมันได้ลบอักขระที่ไม่ใช่ตัวอักษรและตัวเลขอื่น ๆ ทั้งหมดนอกเหนือจากอักขระ%
ที่ตามมาด้วยตัวเลข แต่คุณจะเห็นว่ามันถูกลบออกไป บางทีนี่อาจเป็นเพราะมันรับรู้ว่ามันเป็นที่เข้ารหัสแล้ว สิ่งนี้จะถูกบังคับใช้เมื่อคุณลองแทรก%c3
ลงในสตริงของคุณ แต่จะไม่ดึงออกมาเนื่องจาก%c3
เป็นลำดับการเข้ารหัสที่ถูกต้อง
sanitize_title_with_dashes
ผลลัพธ์:
% C3% A2% C3% a4-% C3% b6-% C3% 9F% C3% a1-% 20-OO-PP -_-% C3% a8% C3% A4% C3% A7
ดังนั้นคุณจะเห็นว่ามันไม่ได้ลบอักขระเน้นเสียง แต่เข้ารหัสพวกมัน
ตอนนี้เรามาดูสตริงที่ไม่มีอักขระเน้นเสียงเพื่อดูว่าทั้งคู่ทำตัวอย่างไร ...
สตริงตัวอย่าง: %%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~'
sanitize_title()
ผลลัพธ์:
building-% 20-OO-PP-_
sanitize_title_with_dashes
ผลลัพธ์:
building-% 20-OO-PP-_
ดังนั้นคุณสามารถเห็นพวกเขาเหมือนกันทุกประการ ดังนั้นความแตกต่างเพียงอย่างเดียวของพวกเขาก็คือหนึ่งเข้ารหัสสำเนียงเทอร์สขณะที่อีกคนหนึ่งแทนที่พวกเขา