在不删除用户使用“<br>”插入换行符的功能的情况下,无法在定制器中进行清理和在主题中转义

时间:2015-12-01 作者:Derek

我一直不知道如何正确清理(在自定义程序中)和转义(在主题中),同时允许用户使用“<;”和“>”插入“<;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 `&#038;` (a.k.a. `&amp;`)
 *
 * @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\', \'&#038;$1\', $content );
}

return $content;}
是否有方法可以重命名和编辑这些内容,以生成一个自定义函数,允许我使用“<;”和HTML中的“>”一样?

我应该在主题文件中使用wp\\u kses而不是转义吗?

1 个回复
SO网友:bueltge

您应该使用验证帮助网站-https://codex.wordpress.org/Data_Validation

我想在你的背景下wp_kses 正确的功能。您可以允许html标记。该函数有很多可能用于定制需求。

快速使用的一个小示例:

$allowed_html = array(
    \'a\' => array(
        \'href\' => array(),
        \'title\' => array()
    ),
    \'br\' => array(),
);
$my_filtered_string = wp_kses( $string, $allowed_html, $allowed_protocols = array() );
结尾是关于性能的小词。这个函数很饿,你应该小心使用它。有关这方面的更多信息,请参阅this post.

相关推荐

Admin sidebar customization

我的新客户wordpress站点在管理侧栏中没有插件、外观或任何其他默认项。谁能告诉我这些是怎么出现的吗。该站点正在主站点的子目录中运行。它有自己的wordpress安装。主题是前面的rttheme16。提前谢谢。