箱から出して、違いはないように見えます
function esc_html( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
/**
* Filters 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 esc_attr( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
/**
* Filters a string cleaned and escaped for output in an HTML attribute.
*
* Text passed to esc_attr() is stripped of invalid or special characters
* before output.
*
* @since 2.0.6
*
* @param string $safe_text The text after it has been escaped.
* @param string $text The text prior to being escaped.
*/
return apply_filters( 'attribute_escape', $safe_text, $text );
}
2つの関数の唯一の違いは、最後に適用されるフィルターです。WordPressはこれらのフィルターに何も追加しないため、標準のWPインストールでは、これらは非操作です。それらは、誰かがそれらを必要とする可能性がある場合に備えて提供されます。
クイックQ&A
では、デフォルトでそれらは同じですか?
はい!機能は同じ実装を持っていますesc_attr
esc_html
フィルターは同じですか?
唯一の違いは、名前が異なり、同じように機能し、同じように使用され、コアでどちらのフィルターも使用されないことです。
フィルターは何かしますか?
番号!すべてのエスケープは、関数wp_check_invalid_utf8
と関数_wp_specialchars
が呼び出されたときに行われます。
フィルターはエスケープを行わず、プラグインが追加のチェックと処理を行う機会です。
エッジケースはありますか?
フィルターを使用する場合にのみ、フックしたesc_html
がフックしていないattribute_escape
、またはその逆であると言います。標準のWPインストールの場合、2つの機能は同じですが、違いはありません。
なぜattribute_escape
ありませんかesc_attr
?
下位互換性。以前attribute_escape
はesc_
関数がありましたが、スタイル関数が追加された後に非推奨としてマークされています。
なぜこれらのフィルターを使用するのですか?
¯\_(ツ)_/¯
これはまれな状況です。一部の人々は、翻訳APIが置換テキストを検索するために乱用されるのと同じ方法でそれを乱用するかもしれません。これらのフィルターは頻繁に呼び出されるため、これはすでに悪い習慣です。小さな速度損失が何千回も拡大されます
ただし、注意しないと、追加されたエスケープを元に戻したり、エスケープされていないコンテンツを最後に追加したりして、これらの機能のセキュリティを危険にさらす可能性があることを考慮してください。そのため、フィルターは危険です。
これについて心配する必要がありますか?
いいえ。心配する必要があるのは、これらのフィルターを使用した場合のみです。フィルター自体が、開発中の何かが深刻な問題を起こしたことを示す大きな赤い警告を発しているはずです。
関数esc_attr
とesc_html
安全に使用でき、コンテンツをエスケープします。コードのセキュリティを重視する場合、それらを使用する倫理的および道徳的な義務があります
これは私が使用するだけでよいという意味esc_html
ですか?
いいえ、エスケープはすべての期待を設定することです。属性が必要な場合は、を使用してくださいesc_attr
。現時点で機能的に同じだからといって、将来的にセキュリティリリースで変更されなくなるわけではありません