Чи достатньо sanitize_title для створення публікацій?


16

Я хочу генерувати slug для деяких рядків, не проходячи потік генерації слизу WordPress. Тому я хочу знати, які функції він викликає, щоб отримати акуратну кулі. Я спробував sanitize_title (), але він залишає% c2% a0 в результаті.

Відповіді:


27

Ви майже там. Вам потрібна функція sanitize_title_with_dashes ($ title)


1
Хоча це, безумовно, здається правильним, мені трохи незрозуміло, що, схоже, sanitize_title_with_dashes робить інакше для sanitize_title. sanitize_title також додає тире, де пробіл ...
Тім Малоун,

7
Якщо ви перевірите WordPress Codex на sanitize_title_with_dashes ($ title) , ви побачите примітку «він не замінює спеціальних наголошених символів», що означає, що символи на зразок èäçтощо залишаться на місці з цією функцією.
JHoffmann

Зауважте, що sanitize_title_with_dashesтакож sanitize_titleзалиште деякі спеціальні символи, які можуть порушити деякі системи. Я хочу, щоб ви sanitize_html_class
придумали

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() здається, єдиний, який вам потрібен.

У рядку 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()не видалять спеціальних символів.


Це має бути правильна відповідь
bysanchy

0

Окрім чудової відповіді веб-прихильника, я знайшов наступне:

Залежно від вашого використання, це залежатиме від того, що вам потрібно.

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-_

Отже, як ви бачите, вони абсолютно однакові. Отже, єдиною різницею в них є те, що один кодує наголошені статути, а інший замінює їх.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.