jdz/obfuscator

Server-side email obfuscation paired with the jizy-obfuscator JS client

Maintainers

Package info

github.com/joffreydemetz/obfuscator

Homepage

pkg:composer/jdz/obfuscator

Statistics

Installs: 13

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.0 2026-04-20 12:39 UTC

This package is auto-updated.

Last update: 2026-04-20 15:45:39 UTC


README

Server-side email obfuscation paired with the jizy-obfuscator JS client.

Emits indexed <span id="obfuscated-N"> placeholders and ROT13-encoded HTML payloads; the JS client reveals the real markup in the DOM on page load.

Installation

composer require jdz/emailobfuscator

Usage

PHP

use JDZ\Obfuscator\Obfuscator;

$obfuscator = new Obfuscator();

echo $obfuscator->obfuscate('joe@example.com');
// <span id="obfuscated-0"></span>

echo $obfuscator->obfuscate('support@example.com', 'Write to support', ['class' => 'email']);
// <span id="obfuscated-1"></span>

echo $obfuscator->renderScript();
// <script>window.Obfuscator.decode(["...","..."]);</script>

Twig

use JDZ\Obfuscator\Extension\EmailObfuscatorTwigExtension;

$twig->addExtension(new EmailObfuscatorTwigExtension($obfuscator));
{{ 'joe@example.com'|obfuscate }}
{{ 'joe@example.com'|obfuscate({ class: 'email' }) }}
{{ obfuscate_email('joe@example.com', 'Write to Joe', { class: 'email' }) }}
{{ obfuscate_html('<strong>Hidden</strong>') }}

{# near </body> #}
{{ obfuscate_script() }}

API

Obfuscator

Method Returns
obfuscate(string $email, ?string $label = null, array $attrs = []) placeholder <span>
obfuscateHtml(string $html) placeholder <span>
getPayloads(): string[] ROT13-encoded payloads, ordered by index
renderScript(): string <script>window.Obfuscator.decode([...])</script> — empty when nothing registered
reset(): void clears collected payloads

Twig extension

  • Filter obfuscate(attrs = {})
  • Function obfuscate_email(email, label = null, attrs = {})
  • Function obfuscate_html(html)
  • Function obfuscate_script()

All filter/function outputs are marked is_safe: html.

Client-side

Install and load jizy-obfuscator. Placeholder ids (#obfuscated-0, #obfuscated-1, ...) match the order of the payloads array passed to Obfuscator.decode, which is exactly the order returned by getPayloads() here.

Testing

composer install
composer test

License

MIT - see LICENSE