Esc_html, esc_attr, esc_html_e, vb. Arasındaki fark nedir?


13

Güvenlik adamından geri bildirim aldım ve kodumdaki kullanıcı girişinden uygun şekilde kaçması gerektiğini belirtti. Bu yüzden biraz araştırma yaptım ve kaçan işlevler buldum.

Aralarındaki fark nedir? Ne zaman esc_html()ve ne zaman kullanmalıyım esc_attr()? Sonunda bu işlevleri ne zaman kullanmalıyım _e()?


1
Belgeleri okudunuz mu?
Jacob Peattie

2
Evet ve bu beni daha da karıştırdı :(
baldrick

Yanıtlar:


21

esc_html()HTML olarak ayrıştırılmaması için bir dizeden kaçar. Örneğin, gibi karakterler <dönüştürülür &lt;. Bu, okuyucuya aynı görünecektir, ancak bu, çıktı alınan değer <script>tarayıcı tarafından gerçek bir komut dosyası etiketi olarak yorumlanmayacağı anlamına gelir .

Çıktılanan değer HTML içermediğinde bu işlevi kullanın.

esc_attr()class=""örneğin bir HTML özelliğinde güvenle kullanılması için bir dizeden kaçar . Bu, bir değerin HTML özelliğinden ayrılmasını önler. Örneğin, değer "><script>alert();</script>bir HTML özelliğinde çıktısını almaya çalıştıysanız, geçerli HTML etiketini kapatır ve bir komut dosyası etiketi açar. Bu güvensiz. Değerden kaçarak HTML niteliğini kapatamaz ve güvenli olmayan HTML'yi etiketleyip çıktısı alamaz.

Bir HTML özelliğinin içinde bir değer çıkarırken bu işlevi kullanın.

esc_url() geçerli bir URL olduğundan emin olmak için bir dizeden kaçar.

Bir href=""veya src=""özniteliğin içindeki bir değeri verirken bu işlevi kullanın .

esc_textarea()bir <textarea>öğede kullanılmasının güvenli olması için bir değerden kaçar . Bu işlevle bir değerden kaçmak, a içindeki bir değerin öğeyi <textarea<kapatmasını <textarea>ve kendi HTML'sini vermesini engeller .

Bir <textarea>öğenin içindeki bir değeri verirken bu işlevi kullanın .

esc_html()ve esc_attr()ayrıca biten sürümleri var __(), _e()ve _x(). Bunlar çevrilebilir dizelerin çıktısı içindir.

WordPress, çevrilebilecek metin çıktısı için __(), _e()ve işlevlerine sahiptir _x(). çevrilebilir bir dize __() döndürür , çevrilebilir bir dize _e() yankılanır ve _x()belirli bir bağlamla çevrilebilir bir dize döndürür. Muhtemelen daha önce görmüşsünüzdür.

Bir çeviri dosyasının mutlaka güvenli değerler içerdiğinden emin olamayacağınız için, çevrilebilir bir dize verirken bu işlevleri kullanmak, çıktı alınan dizelerin yukarıda açıklanan aynı soruna neden olmamasını sağlar.

Çevrilebilir dizelerin çıktısını alırken bu işlevleri kullanın.


2
Varsayılan olarak esc_htmlve esc_attrile aynı kodun kullanıldığını (sadece farklı bir kullanılmayan filtreye sahip olduklarını) unutmayın: wordpress.stackexchange.com/questions/264698/…
baptx

4

esc_htmlhtml içinde örneğin bir <p>etiket arasında kullanılır

<p><?php echo esc_html( $some_variable ); ?></p>

esc_attr html etiketlerindeki özellik değerlerinden kaçmak için şu şekilde kullanılır:

<p my-attribute="<?php echo esc_attr( $some_variable ); ?>"></p>

_eSonuna başvurmak metin alanlarıyla kullanmaktır ve sizin için otomatik olarak yankılanacaktır:

<p><?php esc_html_e( 'some-text', 'text-domain' ); ?></p>

<p my-attribute="<?php esc_attr_e( 'some-text', 'text-domain' ); ?>"></p>

ek olarak _eaynı __olan _eama yankılanmaz böylece bir değişken içinde saklayabilirsiniz.


2
_esadece yankılama için değil, yerelleştirme için de. Bu nedenle, yalnızca bir dize işleve iletildiğinde kullanılmalı ve bir metin etki alanı içermelidir. Son örneğiniz yanlış kullanıyor.
Jacob Peattie

@JacobPeattie benim kötü, ben güncelleme ... EDIT Sabit
jrmd
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.