如何转义允许使用html的html代码

时间:2016-10-22 作者:Foo01

我对如何在包含html代码的变量上使用escape函数有点困惑。我试过这个https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data 但我想不出来。这是我的代码:

    $output = \'<p>\';
    $output .= \'<label for="\' . esc_attr( $this->get_field_id( \'title\' ) ) . \'">Title:</label>\';
    $output .= \'<input type="text" class="widefat" id="\' . esc_attr( $this->get_field_id( \'title\' ) ) . \'" name="\' . esc_attr( $this->get_field_name( \'title\' ) ) . \'" value="\' . esc_attr( $title ) . \'"\';
    $output .= \'</p>\';   
    echo $output;
我的问题是如何在不丢失html的情况下逃逸$输出?我这样问是因为我在前面提交了这个代码。由于没有转义代码,我被拒绝了几次。所以现在我认为最好避开这些变量。写非常感谢。

5 个回复
SO网友:Jory Hogeveen

您正在寻找wp_kses(). https://developer.wordpress.org/reference/functions/wp_kses/

还有更多的助手函数,如wp_kses_post()wp_kses_data()

SO网友:maheshwaghmare

1. Escaping

  • 转义属性<label for="<?php esc_attr( $tid ); ?>">

    正在转义HTML<label ..><?php esc_html( \'Text\' ); ?></label>


2. Translation and Escape

Note:

  • textdomain 应该是你自己独特的主题/插件slug

      1。转义和转换属性:<label for="<?php esc_attr( $tid ); ?>">

      无需准备好翻译。如果有一个静态字符串$tid 然后你需要做好过渡准备。

      Invalid:

      <label for="<?php esc_attr__( $tid, \'textdomain\' ) ); ?>">
      <label for="<?php printf( esc_attr__( \'%s\', \'textdomain\' ), $tid ); ?>">
      

      Valid:

      <label for="<?php printf( esc_attr__( \'%s static text\', \'textdomain\' ), $tid ); ?>">
      
      转义和翻译HTML:<label ..><?php esc_html__( \'Text\', \'textdomain\' ); ?></label>

SO网友:cowgill

您的代码对我来说看起来和工作都很好。中的HTMLvalue 已保留。

我唯一的建议是将所有文本字符串__()_e() 因此,它们很容易翻译。这是一个很好的卖点,因为不是每个人都想使用英语。

$output .= \'<label for="\' . esc_attr( $tid ) . \'">\' . __( \'Title:\', \'your-text-domain\' ) . \'</label>\';
了解更多信息I18n on the WordPress Codex.

SO网友:guillaume.molter

如果您想用“WordPress方式”来实现,您不会将HTML存储在临时变量中,而是直接输出。

?> 
<p>
    <label for="<?php esc_attr_e( $this->get_field_id( \'title\' ) ); ?>"> <?php _e(\'Title:\', \'tex-domain\'); ?></label>
    <input type="text" class="widefat" id="<?php esc_attr_e( $this->get_field_id( \'title\' ) ); ?>" value="<?php esc_attr_e( $title ); ?>" />
</p>
<?php 
附言:你也会internationalize 您的文本字符串。

SO网友:ApsaraAruna

尝试使用此方法。这是我的工作。使用html进行回声转义。

$output = \'<p>\';
$output .= \'<label for="\' . esc_attr( $this->get_field_id( \'title\' ) ) . \'">Title:</label>\';
$output .= \'<input type="text" class="widefat" id="\' . esc_attr( $this->get_field_id( \'title\' ) ) . \'" name="\' . esc_attr( $this->get_field_name( \'title\' ) ) . \'" value="\' . esc_attr( $title ) . \'"\';
$output .= \'</p>\';   

$allowed_html = array(
    \'input\' => array(
        \'type\'  => array(),
        \'id\'    => array(),
        \'name\'  => array(),
        \'value\' => array()
     ),
);

echo wp_kses($output ,$allowed_html );