我有下面的html;在Joomla中,电子邮件地址会在您的网站上显示为混淆或“隐藏”。我一直用它在我的网站上显示电子邮件地址,JHtml :: _('email.cloak','demo@example.com')。但我似乎无法在输入文本字段中显示电子邮件地址。
<input id="email_field" name="email" placeholder="<?php echo JHtml::_('email.cloak',$result->email_address, 0); ?>" type="text" />
使用上面的代码将在输入字段中生成以下脚本..
<script type='text/javascript'>
<!-- var prefix = 'ma' + 'il' + 'to';
var path = 'hr' + 'ef' + '=';
var addy16915 = 'user' + '@';
addy16915 = addy16915 + 'user' + '.' + 'com';
document.write(addy16915); //-->\n
</script>
<script type='text/javascript'>
<!-- document.write('<span style=\'display: none;\'>'); //-->
</script>
此电子邮件地址受spam bots保护。您需要启用JavaScript才能查看它。
<script type='text/javascript'>
<!-- document.write('</'); document.write('span>'); //-->
</script>
有什么想法吗?感谢
答案 0 :(得分:1)
JHtmlEmail :: cloak只能写文档文本,它不能像你的情况那样写入元素属性。如果你真的需要这个,你必须创建自己的JHtml助手。这可以通过以下步骤完成。
实施Joomla功能以隐藏属性中的电子邮件:
在your_components / helpers / html / specialemail.php中创建帮助程序类:
<?php
defined('_JEXEC') or die;
abstract class JHtmlSpecialEmail
{
public static function cloak($id, $attribute, $mail)
{
// convert text
$mail = JHtmlSpecialEmail::_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) ."';";
$replacement .= "\n document.getElementById('$id').$attribute = addy$rand.replace(/&#(\d+);/g, function (m, n) { return String.fromCharCode(n); });";
$replacement .= "\n //-->";
$replacement .= '\n </script>';
return $replacement;
}
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;
}
}
然后编写输入电子邮件元素,如:
<input id="email_field" name="email" placeholder="" type="text" />
<?php JHTML::addIncludePath(JPATH_COMPONENT.DS.'helpers'.DS.'html'); ?>
<?php echo JHtml::_('specialemail.cloak', 'email_field', 'placeholder', 'email@domain.com'); ?>
它使用与原始Joomla斗篷功能相同的斗篷算法。它不使用document.write
将电子邮件输出到文档,而是使用this answer中的代码段对ASCII实体进行解码,然后将值直接设置为所选属性。
答案 1 :(得分:0)
多数民众赞成,因为Joomla正在回应,只打印出您必须禁用该地址的电子邮件保护的电子邮件。或者做一些花哨的javascript技巧。