我一直不知道如何正确清理(在自定义程序中)和转义(在主题中),同时允许用户使用“<;”和“>”插入“<;br>\'并在任何需要的地方添加换行符。
我的主题定制器中有一个区域,允许用户将文本放入文本框中,并输出到网站的主要标题区域。它工作得很好,但即使使用esc_HTML(),它似乎也没有真正输出HTML。
我已经查看了WordPress核心清理功能,以查找可用于自定义程序中输入的内容,如:
清理电子邮件,清理html\\u类,清理密钥,我在法典中找到清理主题中输出的方法,如:
当使用其中任何一项时,我最终会在页面上打印“<;br>”,而不是实际插入换行符。我能让它表现得像我想要的那样的唯一方法就是根本不消毒它。如果我没有在自定义程序中使用清理回调,并且我根本没有转义输出,则用户可以在文本框中输入“<;br>”,浏览器将插入换行符,而不是打印“<;br>”。
我想也许我可以做一个自定义函数。我去了wp includes/formatting。php认为我可以复制和编辑sanitize\\u html\\u类函数,并发现:
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 );}
我还发现:
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;}
是否有方法可以重命名和编辑这些内容,以生成一个自定义函数,允许我使用“<;”和HTML中的“>”一样?
我应该在主题文件中使用wp\\u kses而不是转义吗?