Chcę wygenerować ślimak dla niektórych ciągów bez przechodzenia przez przepływ generowania ślimaka WordPress. Dlatego chcę wiedzieć, jakie funkcje wywołuje, aby uzyskać porządny ślimak. Próbowałem sanitize_title (), ale w rezultacie pozostawia% c2% a0.
seo
slug
sanitization
a_fan
źródło
źródło
èäç
itp. Pozostaną na miejscu dzięki tej funkcji.sanitize_title_with_dashes
opróczsanitize_title
pozostawić znaki specjalne, które mogą uszkodzić niektóre systemy. Chciałbym, aby bardziej uniwersalne podejście do redukcji ciągów znakówsanitize_html_class
Cóż, jest już odpowiedź, ale chciałem ją trochę rozwinąć, więc oto moje ustalenia:
Jeśli przyjrzymy się
wp_insert_post()
, zobaczymy, że$post_name
jest dezynfekowany za pomocąwp_sanitize_title()
(patrzwp-includes/post.php
)W funkcji
sanitize_title()
mamy filtrsanitize_title
. Jest to interesujące, ponieważ domyślnie filtrysanitize_title_with_dashes()
są zaczepione w tym filtrze (patrzwp-includes/default-filters.php
).Brzmi dziwnie. Byłoby wspaniale poznać wartość wejściową, ale
wp_insert_post()
sanitize_title()
wydaje się, że wystarczy.źródło
sanitize_title()
wydaje się być jedynym, czego potrzebujesz.W linii 211 wp-obejmuje / domyślny-filtry.php znajdziesz:
Oznacza to, że wywołanie
sanitize_title()
najpierw usunie wszystkie znaki specjalne, a następnie zastosujesanitize_title
filtr, wywołując w ten sposóbsanitize_title_with_dashes()
Jak zauważył @JHoffmann, zwykłe wywołanie
sanitize_title_with_dashes()
nie usunie znaków specjalnych.źródło
Oprócz świetnej odpowiedzi websupportera znalazłem poniżej:
W zależności od zastosowania będzie to zależało od potrzeb.
sanitize_title()
jak mówi:... i
sanitize_title_with_dashes
mówi:Tak więc w tym przykładowym ciągu:
Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç
sanitize_title()
wynik:Jak widać zastąpił znaki akcentowane ich nieakcentowanymi odpowiednikami i usunął wszystkie inne znaki niealfanumeryczne oprócz tego, po
%
którym następuje cyfra, ale zobaczysz, że został usunięty, gdy nastąpiła po nim litera; być może dlatego, że postrzega to jako już zakodowane . Jest to wymuszane, gdy próbujesz wstawić%c3
do swojego łańcucha, nie usuwa go, ponieważ%c3
jest to poprawna sekwencja kodowania.sanitize_title_with_dashes
wynik:Jak widać, nie usunął znaków akcentowanych, ale je zakodował.
Teraz spójrzmy na ciąg bez znaków akcentowanych, aby zobaczyć, jak zachowują się oboje ...
Przykładowy ciąg:
%%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~'
sanitize_title()
wynik:sanitize_title_with_dashes
wynik:Jak widać, są dokładnie takie same. Wydaje się więc, że jedyną różnicą jest to, że jeden koduje akcentowane karty, a drugi je zastępuje .
źródło