Фильтровать все выходные данные html


Я хотел бы убедиться, что ни один адрес электронной почты не опубликован в открытом виде. Поэтому я разработал плагин, который заменяет все адреса электронной почты безопасной для спам-ботов альтернативой.

Но некоторые пользователи помещают свой адрес электронной почты в заголовок своего блога, вне цикла публикации. Как я могу это зафиксировать и отфильтровать?

Это работает:

        add_filter('the_content', array(&$this,"pep_replace"));
        add_filter('the_excerpt', array(&$this,"pep_replace_excerpt"));
        add_filter('the_comments', array(&$this,"pep_replace"));

Это не (он не фиксирует адрес электронной почты, который я добавил в свою тестовую тему header.php файл).

add_filter('template',  array(&$this,"pep_replace"));
add_filter('wp_head',  array(&$this,"pep_replace"));
add_filter('shutdown',  array(&$this,"pep_replace"));

Я вцепляюсь в крючок документация, но у меня нет идей о том, что может быть подходящим фильтром. Спасибо, что уделили мне время.

Author: pixeline, 2012-05-21

2 answers

Вы не можете защититься от всего, что будет делать пользователь. Что, если они жестко закодируют адрес электронной почты в нижнем колонтитуле/верхнем колонтитуле/боковой панели своей темы? Единственный способ захватить и избежать этого - буферизация вывода... и это может превратиться в настоящий кошмар.

Моя рекомендация состояла бы в том, чтобы сделать две вещи:

  1. Подключайтесь ко всем местам, которые имеют смысл.
  2. Предоставлять доступные функции, которые позволяют людям избегать своих собственных содержание.

Вы уже в значительной степени рассмотрели шаг 1. Адреса электронной почты чаще всего появляются в содержимом сообщений (the_content и the_excerpt), но также могут появляться в комментариях. Я бы также рекомендовал фильтровать заголовок и содержимое виджетов боковой панели:

add_filter('the_title', array(&$this,"pep_replace"));
add_filter('widget_content', array(&$this,"pep_replace"));

Для шага 2 задокументируйте общую функцию, которую люди могут использовать для очистки своих адресов электронной почты:

function sanitize_email( $email ) {
    // do stuff
    return $sanitized_email;
}

Затем пользователи могут использовать это вместо жесткого кодирования своего адреса электронной почты:

<p>Please contact me at <?php echo sanitize_email( '[email protected]' ); ?>.</p>

Если бы вы еще не были фильтруя the_content, я бы рекомендовал вам также создать шорткод... но это немного излишне.

Будьте очень осторожны

Остальные три крючка, которые вы перечислили, на самом деле не являются фильтрами - это крючки действий. Они предназначены для того, чтобы быть местами в коде, где вы можете использовать свои собственные логические методы. В отличие от фильтров, они ничего не return для PHP... поэтому они довольно бессмысленны при использовании в качестве фильтров.

 2
Author: EAMann, 2012-05-21 21:45:50

Ручной метод:

add_action('wp_loaded', 'buffer_start');    function buffer_start() { ob_start("myy_callback"); }
add_action('shutdown', 'buffer_end');       function buffer_end()   { ob_end_flush(); }


function myy_callback($buffer) {
  // modify buffer here, and then return the updated code
  $buffer = str_replace('MERCEDES','FERRARI',$buffer);
  return $buffer;
}
 1
Author: T.Todua, 2015-11-10 15:22:05