dostosowywanie — nie można oczyścić w dostosowywaniu i uciec w motywie bez usunięcia możliwości użycia przez użytkownika „” w celu wstawienia końca wiersza
![dostosowywanie — nie można oczyścić w dostosowywaniu i uciec w motywie bez usunięcia możliwości użycia przez użytkownika „” w celu wstawienia końca wiersza](https://oen.pl/wp-content/uploads/2023/01/apple-touch-icon@2.png)
Nie byłem w stanie wymyślić, jak mogę prawidłowo zdezynfekować (w dostosowywaniu) i uciec (w motywie, jednocześnie pozwalając użytkownikowi użyć „<” i „>”, aby wstawić „
” i dodać podział linii gdzie chcą.
Mam obszar w dostosowywaniu mojego motywu, który pozwala użytkownikowi umieścić tekst w polu tekstowym i wyprowadza go do głównego obszaru nagłówka witryny. Działa dobrze, ale nie wydaje się, aby naprawdę wyświetlał HTML, nawet przy użyciu esc_html().
Przejrzałem podstawowe funkcje dezynfekcji WordPress w poszukiwaniu czegoś, czego mogę użyć do wprowadzania danych w dostosowywaniu, takich jak:
- sanitize_email
- sanitize_html_class
- sanitize_key
Przekopałem się przez kodeks, aby znaleźć sposoby na oczyszczenie danych wyjściowych w motywie, takich jak:
Używając któregokolwiek z nich, kończę na wydrukowaniu „
” na stronie, zamiast wstawiania końca linii. Jedyny sposób, w jaki udało mi się sprawić, by zachowywał się tak, jak chcę, to w ogóle go nie dezynfekować. Jeśli nie użyję wywołania zwrotnego sanitize w dostosowywaniu i w ogóle nie ucieknę przed wyjściem, użytkownik może umieścić „
” w polu tekstowym, a przeglądarka wstawi podział linii zamiast drukowania „
”.
Pomyślałem, że może mógłbym stworzyć niestandardową funkcję. Poszedłem do wp-includes/formatting.php myśląc, że mogę skopiować i edytować funkcję sanitize_html_class i znalazłem to:
function esc_html( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
/**
* Filter a string cleaned and escaped for output in HTML.
*
* Text passed to esc_html() is stripped of invalid or special characters
* before output.
*
* @since 2.8.0
*
* @param string $safe_text The text after it has been escaped.
* @param string $text The text prior to being escaped.
*/
return apply_filters( 'esc_html', $safe_text, $text );}
znalazłem też to:
function sanitize_html_class( $class, $fallback = '' ) {
//Strip out any % encoded octets
$sanitized = preg_replace( '|%[a-fA-F0-9][a-fA-F0-9]|', '', $class );
//Limit to A-Z,a-z,0-9,_,-
$sanitized = preg_replace( '/[^A-Za-z0-9_-]/', '', $sanitized );
if ( '' == $sanitized )
$sanitized = $fallback;
/**
* Filter a sanitized HTML class string.
*
* @since 2.8.0
*
* @param string $sanitized The sanitized HTML class.
* @param string $class HTML class before sanitization.
* @param string $fallback The fallback string.
*/
return apply_filters( 'sanitize_html_class', $sanitized, $class, $fallback );}
/**
* Converts lone & characters into `&` (a.k.a. `&`)
*
* @since 0.71
*
* @param string $content String of characters to be converted.
* @param string $deprecated Not used.
* @return string Converted string.
*/
function convert_chars( $content, $deprecated = '' ) {
if ( ! empty( $deprecated ) ) {
_deprecated_argument( __FUNCTION__, '0.71' );
}
if ( strpos( $content, '&' ) !== false ) {
$content = preg_replace( '/&([^#])(?![a-z1-4]{1,8};)/i', '&$1', $content );
}
return $content;}
Czy istnieje sposób, w jaki mogę zmienić ich nazwę i edytować, aby utworzyć niestandardową funkcję, która pozwoli mi używać „<” i „>”, tak jak w HTML?
Czy powinienem używać wp_kses w pliku motywu zamiast ucieczki?