Não é possível desinfetar no personalizador e escaping no tema sem remover a capacidade do usuário de usar “” para inserir uma quebra de linha

Não consegui descobrir como posso sanitizar adequadamente (no personalizador) e escaping (no tema, permitindo ao usuário usar “” para inserir um ‘
‘ e adicionar uma quebra de linha onde quer que eles desejem.

Eu tenho uma área no personalizador do meu tema que permite que o usuário coloque texto em uma checkbox de texto e ele seja enviado para uma área principal do site. Isso funciona bem, mas não parece realmente ser a saída de HTML, mesmo com o uso de esc_html ().

Eu examinei as funções de sanitização do núcleo do WordPress para algo que eu possa usar para a input no personalizador como:

  • sanitize_email
  • sanitize_html_class
  • sanitize_key

E eu cavei o códice para maneiras de desinfetar a saída no tema como:

  • esc_html
  • esc_attr

Ao usar qualquer um desses, acabo com o “
” sendo impresso na página, em vez de inserir uma quebra de linha. A única maneira pela qual eu consegui fazer com que se comporte como eu quero não é sanitizá-lo. Se eu não usar um callback de sanitização no personalizador, e eu não escaping da saída, o usuário pode colocar “
” na checkbox de texto e o navegador irá inserir uma quebra de linha em vez de imprimir o “
“.

Pensei que talvez eu pudesse fazer uma function personalizada. Eu fui para wp-includes / formatting.php pensando que eu poderia copiar e editar a function sanitize_html_class e encontrou isso:

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 );} 

Eu também achei isso:

 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 AZ,az,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 `&` (aka `&`) * * @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;} 

Existe uma maneira de renomear e editar isso para criar uma function personalizada que me permita usar “”, como posso em HTML?

Devo usar o wp_kses no arquivo do tema em vez de escaping?

Solutions Collecting From Web of "Não é possível desinfetar no personalizador e escaping no tema sem remover a capacidade do usuário de usar “” para inserir uma quebra de linha"

Você deve usar o site de ajuda da validação – https://codex.wordpress.org/Data_Validation

Eu acho que no seu contexto é wp_kses a function certa. Você pode permitir tags html. A function tem muitas possibilidades para usá-lo com requisitos personalizados.

Um pequeno exemplo de uso rápido:

 $allowed_html = array( 'a' => array( 'href' => array(), 'title' => array() ), 'br' => array(), ); $my_filtered_string = wp_kses( $string, $allowed_html, $allowed_protocols = array() ); 

Pequenas palavras no final sobre o desempenho. A function está com fome, você deve usá-la com cuidado. Mais sobre isso, incluem valores de benchmarks que você pode encontrar nesta publicação .