web-dev-qa-db-ja.com

HTMLを許可してHTMLコードをエスケープする方法

私はそれにHTMLコードを持つ変数にエスケープ関数を使用する方法を少し混乱しています。私はこれを試しました 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を失うことなく$ outputをエスケープする方法を教えてください。私はthemeforestにこのコードを提出しているので私は尋ねています。そこから私はコードをエスケープしていないために数回拒否されました。だから今私はそれがそこに変数をエスケープする方が良いと思います。書きます?ありがとうございました!

2
Foo01

あなたがそれを "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 

P.S:あなたも 国際化 あなたのテキスト文字列。

1

あなたはwp_kses()を探しています。 https://codex.wordpress.org/Function_Reference/wp_kses

wp_kses_post()wp_kses_data()のようなより多くのヘルパー関数があります

0
Jory Hogeveen

あなたのコードは私のために見えそしてうまく働きます。 valueのHTMLは保存されます。

私の唯一の推薦は__()_e()であなたのすべてのテキスト文字列を包むことであるのでそれらは簡単に翻訳されることができます。 ThemeForestのようなマーケットプレイスのサイトでは、誰もが英語を使いたくないので、これは素晴らしいセールスポイントです。

$output .= '<label for="' . esc_attr( $tid ) . '">' . __( 'Title:', 'your-text-domain' ) . '</label>';

WordPress Codexで 国際化についてもっと読む

0
cowgill

1.エスケープ

  • エスケープ属性<label for="<?php esc_attr( $tid ); ?>">

  • HTMLのエスケープ<label ..><?php esc_html( 'Text' ); ?></label>


2.翻訳とエスケープ

注意:

  • textdomainはあなた自身のユニークなテーマ/プラグインスラッグであるべきです。
  • 翻訳された文字列は静的な値を含むべきです。あなたが動的な価値を持っているならば、それを翻訳の準備をする必要はありません。


1。属性をエスケープして変換する:<label for="<?php esc_attr( $tid ); ?>">

翻訳の準備をする必要はありません。もしあなたが$tidを持つ静的な文字列を持っているなら、あなたはそれをトランジションの準備ができているようにする必要があります。

無効:

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

有効:

<label for="<?php printf( esc_attr__( '%s static text', 'textdomain' ), $tid ); ?>">
  1. HTMLのエスケープと翻訳:<label ..><?php esc_html__( 'Text', 'textdomain' ); ?></label>
0
maheshwaghmare