Відповіді:
Ви майже там. Вам потрібна функція 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()
здається, єдиний, який вам потрібен.
У рядку 211 wp-include / default-filters.php ви знайдете:
add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3);
Це означає, що виклик sanitize_title()
спочатку видалить усі спеціальні символи, потім застосує sanitize_title
фільтр, тим самим викликаючиsanitize_title_with_dashes()
Як зазначав @JHoffmann, просто дзвінки sanitize_title_with_dashes()
не видалять спеціальних символів.
Окрім чудової відповіді веб-прихильника, я знайшов наступне:
Залежно від вашого використання, це залежатиме від того, що вам потрібно.
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()
результат:
будівля-% 20-oo-pp-_
sanitize_title_with_dashes
результат:
будівля-% 20-oo-pp-_
Отже, як ви бачите, вони абсолютно однакові. Отже, єдиною різницею в них є те, що один кодує наголошені статути, а інший замінює їх.