Фильтровать все выходные данные 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"));
Я вцепляюсь в крючок документация, но у меня нет идей о том, что может быть подходящим фильтром. Спасибо, что уделили мне время.
2 answers
Вы не можете защититься от всего, что будет делать пользователь. Что, если они жестко закодируют адрес электронной почты в нижнем колонтитуле/верхнем колонтитуле/боковой панели своей темы? Единственный способ захватить и избежать этого - буферизация вывода... и это может превратиться в настоящий кошмар.
Моя рекомендация состояла бы в том, чтобы сделать две вещи:
- Подключайтесь ко всем местам, которые имеют смысл.
- Предоставлять доступные функции, которые позволяют людям избегать своих собственных содержание.
Вы уже в значительной степени рассмотрели шаг 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... поэтому они довольно бессмысленны при использовании в качестве фильтров.
Ручной метод:
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;
}