sanitize_title เพียงพอที่จะสร้างตัวดักเสาหรือไม่


16

ฉันต้องการสร้างกระสุนสำหรับสายบางอย่างโดยไม่ต้องผ่านการไหลของการสร้างกระสุน WordPress ดังนั้นฉันต้องการทราบว่าฟังก์ชั่นใดที่เรียกใช้เพื่อให้ได้กระสุนที่เรียบร้อย ฉันลอง sanitize_title () แต่ได้ผล% c2% a0

คำตอบ:


27

คุณเกือบจะอยู่ที่นั่นแล้ว ฟังก์ชั่นที่คุณต้องการคือsanitize_title_with_dashes ($ title)


1
แม้ว่าสิ่งนี้จะปรากฏขึ้นอย่างถูกต้อง แต่ฉันก็ยังไม่ค่อยชัดเจนในสิ่งที่ sanitize_title_with_dashes ดูเหมือนจะแตกต่างจาก sanitize_title sanitize_title ยังเพิ่มเครื่องหมายขีดคั่นที่ช่องว่างคือ ...
Tim Malone

7
หากคุณตรวจสอบ WordPress Codex สำหรับsanitize_title_with_dashes ($ title)คุณจะเห็นข้อความว่า 'มันไม่ได้แทนที่อักขระเน้นเสียงพิเศษ'ซึ่งหมายความว่าตัวละครเช่นèäçฯลฯ จะอยู่กับฟังก์ชันนี้
JHoffmann

โปรดทราบว่าsanitize_title_with_dashesรวมทั้งsanitize_titleปล่อยให้ตัวละครพิเศษบางอย่างที่อาจทำลายระบบบางอย่าง ฉันต้องการวิธีการที่เป็นสากลมากขึ้นในการลดสตริงลองดูsanitize_html_class
GDY

2

มีคำตอบอยู่แล้ว แต่ฉันต้องการขยายออกไปเล็กน้อยดังนั้นนี่คือข้อค้นพบของฉัน:

หากเรามีลักษณะที่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()ดูเหมือนจะเพียงพอแล้ว


2

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()จะไม่ลบอักขระพิเศษ


นี่ควรเป็นคำตอบที่ถูกต้อง
bysanchy

0

นอกจากคำตอบที่ยอดเยี่ยมของ 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-_

ดังนั้นคุณสามารถเห็นพวกเขาเหมือนกันทุกประการ ดังนั้นความแตกต่างเพียงอย่างเดียวของพวกเขาก็คือหนึ่งเข้ารหัสสำเนียงเทอร์สขณะที่อีกคนหนึ่งแทนที่พวกเขา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.