Obfuscate Email

Component ID

2831455

Component name

Obfuscate Email

Component type

module

Maintenance status

Development status

Component security advisory coverage

not-covered

Downloads

1115

Component created

Component changed

Component body

Protect email addresses from spam bots, in two situations:

  1. In a field template, or
  2. in a text filter for ckeditor output

Both situation utilize the same javascript.

How it works?

To hide your emails from bots, render a non readable email on the server and
decrypt it via vanilla JS in the client. No jQuery needed. The basic idea consists of three parts:

  • hide behind a data-attribute
  • substitute the @-sign and dots (.) with /at/, /dot/, then
  • shift everything via rot13
  • rebuild it via javascript

Notice: There is no non-javascript fallback to this method!

How to use the template

Have a look into template/field--email.html.twig to have a fully working
example. This template will be used when the module is enabled. Use the
drupal suggestion system to override this default template. The JS is attached
to the page.

<a data-mail-to="znvy/ng/znvy/qbg/pbz">Email</a>
<a data-mail-to="znvy/ng/znvy/qbg/pbz" data-replace-inner="">Email</a>
<span data-mail-to="znvy/ng/znvy/qbg/pbz" data-replace-inner="@mail">drop me a line at @mail</span>

will be converted to

<a href="mailto:mail@mail.com">Email</a>
<a href="mailto:mail@mail.com">mail@mail.com</a>
<span>drop me a line at mail@mail.com</span>

Note: Use the data-replace-inner attribute to replace the complete inner text,
or give it a string to only replace this very string.

How to use the text filter

In the backend go to admin/config/content/formats, e.g. Basic HTML, and under
the section "Enabled filters" check the box "Obfuscate Email". So now every
mailto-anchor written in the ckeditor will be preprocessed before rendering and
substituted on the client side.

Source

GitHub: https://www.github.com/WondrousLLC/obfuscate_email

Thanks

Thanks to b_sharpe for adding the text filter.