{"id":7901,"date":"2010-01-23T12:38:46","date_gmt":"2010-01-23T12:38:46","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/pixelines-email-protector\/"},"modified":"2025-09-06T20:47:59","modified_gmt":"2025-09-06T20:47:59","slug":"pixelines-email-protector","status":"publish","type":"plugin","link":"https:\/\/frp.wordpress.org\/plugins\/pixelines-email-protector\/","author":66850,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.4.0","stable_tag":"1.4.0","tested":"6.8.5","requires":"2.7","requires_php":"","requires_plugins":null,"header_name":"Email protector","header_author":"pixeline","header_description":"","assets_banners_color":"c1ccd9","last_updated":"2025-09-06 20:47:59","external_support_url":"","external_repository_url":"","donate_link":"http:\/\/goo.gl\/7L2ua","header_plugin_uri":"https:\/\/pixeline.be","header_author_uri":"https:\/\/pixeline.be","rating":4.3,"author_block_rating":0,"active_installs":900,"downloads":21575,"num_ratings":8,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"1.4.0":{"tag":"1.4.0","author":"pixeline","date":"2025-09-06 20:47:59"},"trunk":{"tag":"trunk","author":"pixeline","date":"2017-03-07 21:35:20"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":1,"4":4,"5":3},"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":979987,"resolution":"256x256","location":"assets","locale":""},"icon.svg":{"filename":"icon.svg","revision":979985,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":1569064,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":1569063,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.4.0","trunk"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[3513,267,18102,11181,599],"plugin_category":[41,49,54],"plugin_contributors":[82156],"plugin_business_model":[],"class_list":["post-7901","plugin","type-plugin","status-publish","hentry","plugin_tags-address","plugin_tags-email","plugin_tags-harvest","plugin_tags-obfuscate","plugin_tags-spam","plugin_category-communication","plugin_category-maps-and-location","plugin_category-security-and-spam-protection","plugin_contributors-pixeline","plugin_committers-pixeline"],"banners":{"banner":"https:\/\/ps.w.org\/pixelines-email-protector\/assets\/banner-772x250.png?rev=1569063","banner_2x":"https:\/\/ps.w.org\/pixelines-email-protector\/assets\/banner-1544x500.png?rev=1569064","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/pixelines-email-protector\/assets\/icon.svg?rev=979985","icon":"https:\/\/ps.w.org\/pixelines-email-protector\/assets\/icon.svg?rev=979985","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>This plugin provides an unobtrusive yet efficient protection against email harvesters \/ spambots. Here is a <a href=\"https:\/\/pixeline.be\/blog\/email-protector-demo-4258.html\">demo<\/a>.<\/p>\n\n<p>Post\/page authors may write email addresses in their article in the usual format (\"john@doe.com\") without exposing them to spam email harvesters. The plugin takes care of the obfuscation, implementing a graceful degradation technique focusing on usability so as to protect your email addresses from harvesters while keeping them usable to your human visitors.<\/p>\n\n<p>The plugin replaces any email address found in posts, pages, comments and excerpts, and replace them by a bit of html markup that should deceive most email harvesters: <code>&lt;span class=\"email\"&gt;john(replace the parenthesis by @)doe.com&lt;\/span&gt;<\/code>.\nIf javascript is available, it will display a clickable link and display the original email to the human user. Maximum usability, maximum protection.<\/p>\n\n<p><strong>Please <a href=\"http:\/\/wordpress.org\/extend\/plugins\/pixelines-email-protector\/\">rate the plugin<\/a> if you like it.<\/strong><\/p>\n\n<h3>Usage<\/h3>\n\n<p>Write your email addresses inside your posts and pages as usual. When the plugin is activated, it will replace them by a human-readable html string that explains how to deduce the email address, and if javascript is available (99.9% of the time), the original email address will be displayed as a clickable mailto: link. For example:\n    Hello john@doe.com. How are you today?\nwill become\n    John( replace these parenthesis by @ )doe.com.<\/p>\n\n<p>Additionally, you can specify what the mailto: link should look like by sticking a parenthesis inside of which you put the visible link text, like this:<\/p>\n\n<pre><code>Hello john@doe.com(John Doe). How are you today?\n<\/code><\/pre>\n\n<p>will become\n    John( replace these parenthesis by @ )doe.com.<\/p>\n\n<h4>inside a theme<\/h4>\n\n<p>If you need to protect emails inside your Theme's files (like the footer.php for example), you can use the function safe_email() like this:<\/p>\n\n<pre><code> echo safe_email('you@domain.com'); &lt;h3&gt;Contribute&lt;\/h3&gt;\n<\/code><\/pre>\n\n<p>Github repo: https:\/\/github.com\/pixeline\/pixeline-email-protector<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Unzip the file into your wp-content\/plugins directory.<\/li>\n<li>In your wp-admin screen, activate the plugin. That's it, your emails are now safe!<\/li>\n<\/ol>\n\n<p>Additionally, there is a Settings screen (Email Protector) allowing you  you to customize the text that is displayed as a replacement to the email address.<\/p>\n\n<!--section=changelog-->\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Security: Fixed stored XSS vulnerability on the Settings page by sanitizing input and escaping output.<\/li>\n<li>Security: Escaped frontend-generated markup (title and visible text) and used safe DOM APIs.<\/li>\n<li>Admin: Migrated options to the WordPress Settings API.<\/li>\n<li>Admin: Changed settings page capability to manage_options.<\/li>\n<li>JS: Rewrote frontend manipulation to use createElement\/textContent instead of insertAdjacentHTML.<\/li>\n<li>Meta: Updated \"Tested up to\" to 6.8.2 and plugin version to 1.4.0.<\/li>\n<li>I18n: Load text domain via load_plugin_textdomain on plugins_loaded.<\/li>\n<li>Widgets: Remove non-existent widget_content; add widget_text_content filter.<\/li>\n<li>Options: Add whitelist and 64-char length cap to substitution string.<\/li>\n<li>Performance: Early exit in content filters when no '@' present.<\/li>\n<li>Assets: Use filemtime-based versioning for the enqueued JS.<\/li>\n<\/ul>\n\n<h4>1.3.7<\/h4>\n\n<p>Enhancement: now filters the Text Widget content.<\/p>\n\n<h4>1.3.6<\/h4>\n\n<p>mild fixes.<\/p>\n\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>fixed admin ui<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Support for WP 4.7<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>improved readme with a Demo + transition to Github + French translation.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Extensive rewrite.<\/li>\n<li>Plugin does not run in the Admin anymore.<\/li>\n<li>The plugin does not need jQuery anymore. Plain vanilla javascript.<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Fix bug occurring when there are similar addresses, one being a substring of the other. Thank you, @mkranz ( https:\/\/wordpress.org\/support\/profile\/mkranz )<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Stupid error fixed. My bad.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Fixed all notices showing up when WP_DEBUG is true.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Fixed a possible cause of javascript errors on some setups.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Fixed Warnings appearing before comments.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Added filters for get_the_content, get_the_title and get_the_excerpt<\/li>\n<\/ul>\n\n<h4>1.2<\/h4>\n\n<ul>\n<li>Full code rewrite in OOP to avoid polluting the namespace.<\/li>\n<li>added filters to protect emails in title, widgets, and comments.<\/li>\n<li>Provided a function safe_email($email) to protect emails outside the loop in a theme for example.<\/li>\n<li>Clarified the Settings screen and provided thorough documentation.<\/li>\n<\/ul>\n\n<h4>v1.1<\/h4>\n\n<ul>\n<li>Now detects \"mailto:\" links and protects them too.<\/li>\n<\/ul>\n\n<h4>v1.0.3<\/h4>\n\n<ul>\n<li>Added the option to specify what should be the visible part of the clickable email by adding a title attribute to the generated Anchor.<\/li>\n<li>Changed the span class from \"email\" to \"pep-email\" to (kind of) use the \"pep\" namespace.<\/li>\n<\/ul>\n\n<h4>v1.0.2<\/h4>\n\n<ul>\n<li>Corrected the plugin's \"Stable version\" variable.<\/li>\n<li>fixed folderpath issue because of the wrong foldername the wordpress repository generates for the plugin :-\/<\/li>\n<\/ul>\n\n<h4>v.1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Write email addresses without worrying about spambots and email harvesters.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/frp.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/7901","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/frp.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/frp.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/frp.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=7901"}],"author":[{"embeddable":true,"href":"https:\/\/frp.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pixeline"}],"wp:attachment":[{"href":"https:\/\/frp.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=7901"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/frp.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=7901"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/frp.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=7901"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/frp.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=7901"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/frp.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=7901"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/frp.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=7901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}