Яка різниця між esc_html, esc_attr, esc_html_e тощо?


13

Я отримав відгук від служби безпеки, і він зазначив, що я повинен використовувати належне скасування введення користувачів у своєму коді. Тому я провів кілька досліджень і виявив функції втечі.

Яка різниця між ними? Коли я повинен використовувати esc_html()і коли esc_attr()? І коли я повинен використовувати ці функції _e()в кінці?



2
Та й це мене бентежило ще більше :(
балдрік

Відповіді:


21

esc_html()уникає рядка, щоб він не був розбір на HTML. Наприклад, такі символи <перетворюються на &lt;. Це буде виглядати так само, як і для читача, але це означає, що якщо значення, яке виводиться, <script>то браузер не буде трактуватися як фактичний тег скрипту.

Використовуйте цю функцію, коли значення, що виводиться, не повинно містити HTML.

esc_attr()уникає рядка, щоб його безпечно було використовувати в атрибуті HTML, наприклад, class=""наприклад. Це запобігає вибиванню значення атрибута HTML. Наприклад, якщо значення є, "><script>alert();</script>і ви намагалися вивести його в атрибут HTML, воно закриє поточний тег HTML і відкриє тег сценарію. Це небезпечно. Уникнувши значення, він не зможе закрити атрибут HTML і тег та вивести небезпечний HTML.

Використовуйте цю функцію, виводячи значення в атрибуті HTML.

esc_url() уникає рядка, щоб переконатися, що це дійсна URL-адреса.

Використовуйте цю функцію, виводячи значення всередині атрибута href=""або src=""атрибута.

esc_textarea()уникає значення, щоб безпечно його використовувати в <textarea>елементі. Уникнувши значення за допомогою цієї функції, це запобігає виведенню значення в a <textarea<з закриття <textarea>елемента та виведення його власного HTML.

Використовуйте цю функцію, виводячи значення всередині <textarea>елемента.

esc_html()а esc_attr()також версії , що закінчуються на __(), _e()і _x(). Вони призначені для виведення рядків, що перекладаються.

WordPress має функції, __(), _e()і _x(), для виведення тексту , який може бути переведений. __() повертає рядку, що перекладається, _e() повторює рядок, що перекладається, і _x()повертає рядок, що перекладається, із заданим контекстом. Ви, напевно, бачили їх і раніше.

Оскільки ви не можете довіряти файлу перекладу, який містить безпечні значення, використання цих функцій при виведенні рядка, що перекладається, гарантує, що виведені рядки не можуть викликати ту саму проблему, як описано вище.

Використовуйте ці функції під час виведення рядків, що перекладаються.


2
Зауважте, що за замовчуванням немає різниці між esc_htmlі esc_attr, використовується той самий код (у них просто інший невикористаний фільтр): wordpress.stackexchange.com/questions/264698/…
baptx

4

esc_htmlбуде використовуватися всередині html, наприклад, між <p>тегом

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

esc_attr буде використовуватися для уникнення значень атрибутів у тегах HTML, як-от так:

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

застосовуючи _eдо кінця, це використовувати його з текстовими доменами, і він автоматично повторюватиме вам, наприклад:

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

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

крім того, _eє також те, __що робить те ж саме, _eале не повторює його, щоб ви могли зберігати його у змінній.


2
_eце не просто для відлуння, це для локалізації. Тому його слід використовувати лише тоді, коли рядок передається функції, і повинен включати текстовий домен. Ваш останній приклад - це неправильне використання.
Джейкоб Пітті

@JacobPeattie моя погана, я буду оновити ... EDIT Виправлено
jrmd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.