【问题标题】:Joomla - Email Address as Input ValueJoomla - 电子邮件地址作为输入值
【发布时间】:2012-09-25 03:18:31
【问题描述】:

我有下面的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>

此电子邮件地址已受到防止垃圾邮件机器人的保护。您需要启用 JavaScript 才能查看它。

<script type='text/javascript'>  
    <!--  document.write('</');  document.write('span>');  //-->  
</script>

有什么想法吗?谢谢

【问题讨论】:

    标签: javascript html joomla


    【解决方案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 = '&#109;a' + 'i&#108;' + '&#116;o';";
            $replacement    .= "\n var path = 'hr' + 'ef' + '=';";
            $replacement    .= "\n var addy". $rand ." = '". @$mail[0] ."' + '&#64;';";
            $replacement    .= "\n addy". $rand ." = addy". $rand ." + '". implode("' + '&#46;' + '", $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', '&#97;', $text);
            $text   = str_replace('e', '&#101;', $text);
            $text   = str_replace('i', '&#105;', $text);
            $text   = str_replace('o', '&#111;', $text);
            $text   = str_replace('u', '&#117;', $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 cloak 函数相同的 cloak 算法。它没有使用document.write 将电子邮件输出到文档,而是使用来自this answer 的sn-p 来解码ASCII 实体,然后直接将值设置为所选属性。

    【讨论】:

      【解决方案2】:

      那是因为这就是 Joomla 所回显的内容,要打印出您必须禁用该地址的电子邮件保护的电子邮件。或者做一些花哨的 javascript 技巧。

      【讨论】:

        猜你喜欢
        • 2010-12-04
        • 1970-01-01
        • 1970-01-01
        • 2011-08-24
        • 1970-01-01
        • 2023-03-06
        • 2011-04-16
        • 2018-12-29
        • 1970-01-01
        相关资源
        最近更新 更多