130 lines
3.7 KiB
PHP
130 lines
3.7 KiB
PHP
<?php
|
|
/**
|
|
* @package Joomla.Libraries
|
|
* @subpackage HTML
|
|
*
|
|
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
|
|
* @license GNU General Public License version 2 or later; see LICENSE
|
|
*/
|
|
|
|
defined('JPATH_PLATFORM') or die;
|
|
|
|
/**
|
|
* Utility class for cloaking email addresses
|
|
*
|
|
* @package Joomla.Libraries
|
|
* @subpackage HTML
|
|
* @since 1.5
|
|
*/
|
|
abstract class JHtmlEmail
|
|
{
|
|
/**
|
|
* Simple JavaScript email cloaker
|
|
*
|
|
* By default replaces an email with a mailto link with email cloaked
|
|
*
|
|
* @param string $mail The -mail address to cloak.
|
|
* @param boolean $mailto True if text and mailing address differ
|
|
* @param string $text Text for the link
|
|
* @param boolean $email True if text is an e-mail address
|
|
*
|
|
* @return string The cloaked email.
|
|
*
|
|
* @since 1.5
|
|
*/
|
|
public static function cloak($mail, $mailto = true, $text = '', $email = true)
|
|
{
|
|
// Convert text
|
|
$mail = static::convertEncoding($mail);
|
|
|
|
// Split email by @ symbol
|
|
$mail = explode('@', $mail);
|
|
$mail_parts = explode('.', $mail[1]);
|
|
|
|
// Random number
|
|
$rand = rand(1, 100000);
|
|
|
|
$replacement = "\n <script type='text/javascript'>";
|
|
$replacement .= "\n <!--";
|
|
$replacement .= "\n var prefix = 'ma' + 'il' + 'to';";
|
|
$replacement .= "\n var path = 'hr' + 'ef' + '=';";
|
|
$replacement .= "\n var addy" . $rand . " = '" . @$mail[0] . "' + '@';";
|
|
$replacement .= "\n addy" . $rand . " = addy" . $rand . " + '" . implode("' + '.' + '", $mail_parts) . "';";
|
|
|
|
if ($mailto)
|
|
{
|
|
// Special handling when mail text is different from mail address
|
|
if ($text)
|
|
{
|
|
if ($email)
|
|
{
|
|
// Convert text
|
|
$text = static::convertEncoding($text);
|
|
|
|
// Split email by @ symbol
|
|
$text = explode('@', $text);
|
|
$text_parts = explode('.', $text[1]);
|
|
$replacement .= "\n var addy_text" . $rand . " = '" . @$text[0] . "' + '@' + '" . implode("' + '.' + '", @$text_parts)
|
|
. "';";
|
|
}
|
|
else
|
|
{
|
|
$replacement .= "\n var addy_text" . $rand . " = '" . $text . "';";
|
|
}
|
|
$replacement .= "\n document.write('<a ' + path + '\'' + prefix + ':' + addy" . $rand . " + '\'>');";
|
|
$replacement .= "\n document.write(addy_text" . $rand . ");";
|
|
$replacement .= "\n document.write('<\/a>');";
|
|
}
|
|
else
|
|
{
|
|
$replacement .= "\n document.write('<a ' + path + '\'' + prefix + ':' + addy" . $rand . " + '\'>');";
|
|
$replacement .= "\n document.write(addy" . $rand . ");";
|
|
$replacement .= "\n document.write('<\/a>');";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$replacement .= "\n document.write(addy" . $rand . ");";
|
|
}
|
|
$replacement .= "\n //-->";
|
|
$replacement .= '\n </script>';
|
|
|
|
// XHTML compliance no Javascript text handling
|
|
$replacement .= "<script type='text/javascript'>";
|
|
$replacement .= "\n <!--";
|
|
$replacement .= "\n document.write('<span style=\'display: none;\'>');";
|
|
$replacement .= "\n //-->";
|
|
$replacement .= "\n </script>";
|
|
$replacement .= JText::_('JLIB_HTML_CLOAKING');
|
|
$replacement .= "\n <script type='text/javascript'>";
|
|
$replacement .= "\n <!--";
|
|
$replacement .= "\n document.write('</');";
|
|
$replacement .= "\n document.write('span>');";
|
|
$replacement .= "\n //-->";
|
|
$replacement .= "\n </script>";
|
|
|
|
return $replacement;
|
|
}
|
|
|
|
/**
|
|
* Convert encoded text
|
|
*
|
|
* @param string $text Text to convert
|
|
*
|
|
* @return string The converted text.
|
|
*
|
|
* @since 1.5
|
|
*/
|
|
protected static function convertEncoding($text)
|
|
{
|
|
// Replace vowels with character encoding
|
|
$text = str_replace('a', 'a', $text);
|
|
$text = str_replace('e', 'e', $text);
|
|
$text = str_replace('i', 'i', $text);
|
|
$text = str_replace('o', 'o', $text);
|
|
$text = str_replace('u', 'u', $text);
|
|
|
|
return $text;
|
|
}
|
|
}
|