jdz / obfuscator
Server-side email obfuscation paired with the jizy-obfuscator JS client
1.0.0
2026-04-20 12:39 UTC
Requires
- php: >=8.2
- twig/twig: ^3.0
Requires (Dev)
- phpunit/phpunit: ^11.0
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