Joomla 1.6 emailcloak не работает с русскоязычными доменами почты

Тема в разделе "Собственные разработки форумчан", создана пользователем sanich, 31.07.2011.

  1. Offline

    sanich Недавно здесь

    Регистрация:
    25.01.2011
    Сообщения:
    10
    Симпатии:
    0
    Пол:
    Мужской
    добрый день.

    Почта формата info@мойсайт.рф

    Такую почту плагин emailcloak не заменяет на скрипт.

    в файле emailcloak.php

    есть строки с регулярными выражениями, по которым ищется email, пробовал их править:

    $searchEmail = '([\w\.\-]+\@(?:[a-z0-9\.\-]+\.)+(?:[a-z0-9\-]{2,4}))';
    и
    $pattern = '~' . $searchEmail . '([^a-z0-9]|$)~i';

    модифицирую на:

    $searchEmail = '([\w\.\-]+\@(?:[a-zа-Я0-9\.\-]+\.)+(?:[a-zа-Я0-9\-]{2,4}))';
    и
    $pattern = '~' . $searchEmail . '([^a-zа-Я0-9]|$)~i';

    Скрипт по прежнему не понимат русскоязычного домена. В чем причина? Может что-то еще надо поправить? Буду благодарен за любую помощь за любой совет.
     
  2.  
  3. Offline

    sanich Недавно здесь

    Регистрация:
    25.01.2011
    Сообщения:
    10
    Симпатии:
    0
    Пол:
    Мужской
    Вот весь код файла скрипта, (уже мною модифицированный, но не работает с русскими символами)

    Код (PHP):
    1. <?php
    2. /**
    3.  * @version     $Id: emailcloak.php 21141 2011-04-11 17:20:15Z dextercowley $
    4.  * @copyright   Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
    5.  * @license     GNU General Public License version 2 or later; see LICENSE.txt
    6.  */
    7.  
    8. // No direct access.
    9. defined('_JEXEC') or die;
    10.  
    11. jimport('joomla.plugin.plugin');
    12.  
    13. /**
    14.  * Email cloack plugin class.
    15.  *
    16.  * @package     Joomla.Plugin
    17.  * @subpackage  Content.emailcloak
    18.  */
    19. class plgContentEmailcloak extends JPlugin
    20. {
    21.     /**
    22.      * Plugin that cloaks all emails in content from spambots via Javascript.
    23.      *
    24.      * @param   string  The context of the content being passed to the plugin.
    25.      * @param   mixed   An object with a "text" property or the string to be cloaked.
    26.      * @param   array   Additional parameters. See {@see plgEmailCloak()}.
    27.      * @param   int     Optional page number. Unused. Defaults to zero.
    28.      * @return  boolean True on success.
    29.      */
    30.     public function onContentPrepare($context, &$row, &$params, $page = 0)
    31.     {
    32.         if (is_object($row)) {
    33.             return $this->_cloak($row->text, $params);
    34.         }
    35.         return $this->_cloak($row, $params);
    36.     }
    37.  
    38.     /**
    39.      * Genarate a search pattern based on link and text.
    40.      *
    41.      * @param   string  The target of an email link.
    42.      * @param   string  The text enclosed by the link.
    43.      * @return  string  A regular expression that matches a link containing the parameters.
    44.      */
    45.     protected function _getPattern ($link, $text) {
    46.         $pattern = '~(?:<a [\w"\'=\@\.\-]*href\s*=\s*"mailto:'
    47.             . $link . '"[\w"\'=\@\.\-]*)>' . $text . '</a>~i';
    48.         return $pattern;
    49.     }
    50.  
    51.     /**
    52.      * Cloak all emails in text from spambots via Javascript.
    53.      *
    54.      * @param   string  The string to be cloaked.
    55.      * @param   array   Additional parameters. Parameter "mode" (integer, default 1)
    56.      * replaces addresses with "mailto:" links if nonzero.
    57.      * @return  boolean True on success.
    58.      */
    59.     protected function _cloak(&$text, &$params)
    60.     {
    61.         /*
    62.          * Check for presence of {emailcloak=off} which is explicits disables this
    63.          * bot for the item.
    64.          */
    65.         if (JString::strpos($text, '{emailcloak=off}') !== false) {
    66.             $text = JString::str_ireplace('{emailcloak=off}', '', $text);
    67.             return true;
    68.         }
    69.  
    70.         // Simple performance check to determine whether bot should process further.
    71.         if (JString::strpos($text, '@') === false) {
    72.             return true;
    73.         }
    74.  
    75.         $mode = $this->params->def('mode', 1);
    76.  
    77.         // any@email.address.com
    78.         $searchEmail = '([\w\.\-]+\@(?:[a-zа-Я0-9\.\-]+\.)+(?:[a-zа-Я0-9\-]{2,4}))';
    79.         // any@email.address.com?subject=anyText
    80.         $searchEmailLink = $searchEmail . '([?&][\x20-\x7f][^"<>]+)';
    81.         // anyText
    82.         $searchText = '([\x20-\x7f][^<>]+)';
    83.        
    84.         //Any Image link
    85.         $searchImage    =   "(<img[^>]+>)";
    86.  
    87.         /*
    88.          * Search and fix derivatives of link code <a href="http://mce_host/ourdirectory/email@amail.com"
    89.          * >email@email.com</a>. This happens when inserting an email in TinyMCE, cancelling its suggestion to add
    90.          * the mailto: prefix...
    91.          */
    92.         $pattern = $this->_getPattern($searchEmail, $searchEmail);
    93.         $pattern = str_replace('"mailto:', '"http://mce_host([\x20-\x7f][^<>]+/)', $pattern);
    94.         while (preg_match($pattern, $text, $regs, PREG_OFFSET_CAPTURE)) {
    95.             $mail = $regs[2][0];
    96.             $mailText = $regs[3][0];
    97.  
    98.             // Check to see if mail text is different from mail addy
    99.             $replacement = JHtml::_('email.cloak', $mail, $mode, $mailText);
    100.  
    101.             // Replace the found address with the js cloaked email
    102.             $text = substr_replace($text, $replacement, $regs[0][1], strlen($regs[0][0]));
    103.         }
    104.  
    105.         /*
    106.          * Search and fix derivatives of link code <a href="http://mce_host/ourdirectory/email@amail.com"
    107.          * >anytext</a>. This happens when inserting an email in TinyMCE, cancelling its suggestion to add
    108.          * the mailto: prefix...
    109.          */
    110.         $pattern = $this->_getPattern($searchEmail, $searchText);
    111.         $pattern = str_replace('"mailto:', '"http://mce_host([\x20-\x7f][^<>]+/)', $pattern);
    112.         while (preg_match($pattern, $text, $regs, PREG_OFFSET_CAPTURE)) {
    113.             $mail = $regs[2][0];
    114.             $mailText = $regs[3][0];
    115.  
    116.             // Check to see if mail text is different from mail addy
    117.             $replacement = JHtml::_('email.cloak', $mail, $mode, $mailText, 0);
    118.  
    119.             // Replace the found address with the js cloaked email
    120.             $text = substr_replace($text, $replacement, $regs[0][1], strlen($regs[0][0]));
    121.         }
    122.  
    123.         /*
    124.          * Search for derivatives of link code <a href="mailto:email@amail.com"
    125.          * >email@amail.com</a>
    126.          */
    127.         $pattern = $this->_getPattern($searchEmail, $searchEmail);
    128.         while (preg_match($pattern, $text, $regs, PREG_OFFSET_CAPTURE)) {
    129.             $mail = $regs[1][0];
    130.             $mailText = $regs[2][0];
    131.  
    132.             // Check to see if mail text is different from mail addy
    133.             $replacement = JHtml::_('email.cloak', $mail, $mode, $mailText);
    134.  
    135.             // Replace the found address with the js cloaked email
    136.             $text = substr_replace($text, $replacement, $regs[0][1], strlen($regs[0][0]));
    137.         }
    138.  
    139.         /*
    140.          * Search for derivatives of link code <a href="mailto:email@amail.com">
    141.          * anytext</a>
    142.          */
    143.         $pattern = $this->_getPattern($searchEmail, $searchText);
    144.         while (preg_match($pattern, $text, $regs, PREG_OFFSET_CAPTURE)) {
    145.             $mail = $regs[1][0];
    146.             $mailText = $regs[2][0];
    147.  
    148.             $replacement = JHtml::_('email.cloak', $mail, $mode, $mailText, 0);
    149.  
    150.             // Replace the found address with the js cloaked email
    151.             $text = substr_replace($text, $replacement, $regs[0][1], strlen($regs[0][0]));
    152.         }
    153.        
    154.     /*
    155.          * Search for derivatives of link code <a href="mailto:email@amail.com">
    156.          * <img anything></a>
    157.          */
    158.         $pattern = $this->_getPattern($searchEmail, $searchImage);
    159.         while (preg_match($pattern, $text, $regs, PREG_OFFSET_CAPTURE)) {
    160.             $mail = $regs[1][0];
    161.             $mailText = $regs[2][0];
    162.  
    163.             $replacement = JHtml::_('email.cloak', $mail, $mode, $mailText, 0);
    164.  
    165.             // Replace the found address with the js cloaked email
    166.             $text = substr_replace($text, $replacement, $regs[0][1], strlen($regs[0][0]));
    167.         }
    168.  
    169.         /*
    170.          * Search for derivatives of link code <a href="mailto:email@amail.com?
    171.          * subject=Text">email@amail.com</a>
    172.          */
    173.         $pattern = $this->_getPattern($searchEmailLink, $searchEmail);
    174.         while (preg_match($pattern, $text, $regs, PREG_OFFSET_CAPTURE)) {
    175.             $mail = $regs[1][0] . $regs[2][0];
    176.             $mailText = $regs[3][0];
    177.             // Needed for handling of Body parameter
    178.             $mail = str_replace('&amp;', '&', $mail);
    179.  
    180.             // Check to see if mail text is different from mail addy
    181.             $replacement = JHtml::_('email.cloak', $mail, $mode, $mailText);
    182.  
    183.             // Replace the found address with the js cloaked email
    184.             $text = substr_replace($text, $replacement, $regs[0][1], strlen($regs[0][0]));
    185.         }
    186.  
    187.         /*
    188.          * Search for derivatives of link code <a href="mailto:email@amail.com?
    189.          * subject=Text">anytext</a>
    190.          */
    191.         $pattern = $this->_getPattern($searchEmailLink, $searchText);
    192.         while (preg_match($pattern, $text, $regs, PREG_OFFSET_CAPTURE)) {
    193.             $mail = $regs[1][0] . $regs[2][0];
    194.             $mailText = $regs[3][0];
    195.             // Needed for handling of Body parameter
    196.             $mail = str_replace('&amp;', '&', $mail);
    197.  
    198.             $replacement = JHtml::_('email.cloak', $mail, $mode, $mailText, 0);
    199.  
    200.             // Replace the found address with the js cloaked email
    201.             $text = substr_replace($text, $replacement, $regs[0][1], strlen($regs[0][0]));
    202.         }
    203.  
    204.         // Search for plain text email@amail.com
    205.         $pattern = '~' . $searchEmail . '([^a-zа-Я0-9]|$)~i';
    206.         while (preg_match($pattern, $text, $regs, PREG_OFFSET_CAPTURE)) {
    207.             $mail = $regs[1][0];
    208.             $replacement = JHtml::_('email.cloak', $mail, $mode);
    209.  
    210.             // Replace the found address with the js cloaked email
    211.             $text = substr_replace($text, $replacement, $regs[1][1], strlen($mail));
    212.         }
    213.         return true;
    214.     }
    215. }
     

Поделиться этой страницей

Загрузка...