Czy powinienem uciec przed funkcjami Wordpress, takimi jak the_title, the_excerpt, the_content

15

Spojrzałem na kod, ale nie widziałem ucieczki na funkcjach takich jak the_title the_content the_excerptitp. Być może nie czytałem go poprawnie. Czy muszę uciec od tych funkcji w tworzeniu motywu, takich jak:

esc_html ( the_title () )

Edycja: jak wskazano w odpowiedziach poniżej, powyższy kod jest niepoprawny niezależnie od tego - kod powinien zostać przeczytany esc_html ( get_the_title () )

byronyasgur
źródło
Nie, funkcje te są już zdezynfekowane, więc nie jest to wymagane. Z wyjątkiem przypadku, gdy dane the_contentwyjściowe HTML pochodzi z edytora TinyMCE, w którym wprowadzasz dane. Jest to bardziej zarezerwowane dla danych wejściowych formularza lub danych utworzonych w interfejsie, na przykład przez użytkowników.
Adam

Odpowiedzi:

15

Ucieczka zależy całkowicie od kontekstu, w którym używasz funkcji. To, co jest bezpieczne dla wyświetlania wewnątrz <h1>znaczników, niekoniecznie jest bezpieczne dla valueatrybutu pola wejściowego, a nawet to niekoniecznie byłoby bezpieczne jako hrefwartość atrybutu ...

W skrócie - przeprowadź sanityzację samemu, kiedy ją wyprowadzasz. Choć w przypadku the_title ()lub get_the_title (), esc_htmlnie jest konieczne, ponieważ WordPress stosuje następujące funkcje:

Uwaga: the_title drukuje tytuł - więc esc_html ( the_title () )nie będzie działać. Podobnie the_contentdrukuje zawartość (w każdym razie można oczekiwać, że treść wyświetli HTML).

Stephen Harris
źródło
Ups, głupi ja ... tak, oczywiście esc_html (the_title ()) nie będzie działać. Dziękuję za odpowiedź.
byronyasgur
4
Powiązane: aby wyświetlić tytuł posta w atrybucie HTML , użyjthe_title_attribute()
Chip Bennett
6

Tak i nie - zależy od tego, czy chcesz, aby html tych funkcji był wyprowadzany, czy nie. Jeśli the_content()na przykład uciekniesz , a zawiera on <div>tag, tag ten byłby faktycznie wyprowadzany na stronę w &lt;div&gt;zamian.

Nawiasem mówiąc, jeśli wyjdziesz z wyjścia tych funkcji, będziesz chciał użyć ich ekwiwalentów „get_” (np. get_the_content()), Ponieważ te funkcje bezpośrednio odbijają swoje wyjście.

Joseph Leedy
źródło
0

Możesz po prostu napisać taką funkcję i podłączyć ją do filtra_title :

function my_escape_title( $title ){
    return esc_html( $title );
}
add_filter( 'the_title', 'my_escape_title' );
Vilius
źródło