Changeset 12033

Show
Ignore:
Timestamp:
09/06/07 12:47:00 (1 year ago)
Author:
w_i
Message:

Bulletproofing mail links and added noimages formatter

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/midcom/midcom.core/midcom/helper/formatters.php

    r12027 r12033  
    33if (!function_exists('midcom_helper_formatters_links')) 
    44{     
    5     function midcom_helper_formatters_links($content
     5    function midcom_helper_formatters_links($content,$echo_results=true
    66    {    
    77        // echo $content; 
     
    1414 
    1515        foreach ($blocks as $block) 
    16         {             
     16        { 
    1717            $start = strpos($content, $block, $start); 
    1818                         
     
    5252        } 
    5353 
    54         echo $content; 
     54        if ($echo_results) 
     55        { 
     56            echo $content;             
     57        } 
     58        else 
     59        { 
     60            return $content; 
     61        } 
    5562    } 
    5663    _midcom_helper_formatters_register_filter('links'); 
     
    5966if (!function_exists('midcom_helper_formatters_maillinks')) 
    6067{ 
    61     function midcom_helper_formatters_maillinks($content) 
    62     { 
    63         $content = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})', '<a href="mailto:\\1">\\1</a>', $content);         
    64          
    65         echo $content; 
     68    function midcom_helper_formatters_maillinks($content,$echo_results=true) 
     69    { 
     70        $length = strlen($content); 
     71        $start = 0; 
     72        $end = $length; 
     73        $blocks = explode(" ",$content); 
     74         
     75        foreach ($blocks as $block) 
     76        { 
     77            $start = strpos($content, $block, $start); 
     78             
     79            if (eregi('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})',$block)) 
     80            { 
     81                if (! eregi('([[:alpha:]]+="mailto:)',$block)) 
     82                { 
     83                    $end = strpos($content, $block, $start); 
     84                    $end += strlen($block); 
     85                     
     86                    while ( ereg("[,\.]$", $block) ) 
     87                    { 
     88                        $block = substr( $block, 0, -1 ); 
     89                        $end--; 
     90                    } 
     91                     
     92                    $new_block = $block;                     
     93                    $new_block = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})', '<a href="mailto:\\1">\\1</a>', $new_block); 
     94                     
     95                    _midcom_helper_formatters_replace_content($content, $new_block, $start, $end); 
     96                     
     97                    $start += strlen($new_block); 
     98                } 
     99            } 
     100            else 
     101            { 
     102                $end = strpos($content, $block, $start); 
     103            } 
     104             
     105            $start += 1; 
     106        } 
     107         
     108        if ($echo_results) 
     109        { 
     110            echo $content;             
     111        } 
     112        else 
     113        { 
     114            return $content; 
     115        } 
    66116    } 
    67117    _midcom_helper_formatters_register_filter('maillinks'); 
     
    70120if (!function_exists('midcom_helper_formatters_obfmaillinks')) 
    71121{ 
    72     function midcom_helper_formatters_obfmaillinks($content) 
    73     { 
    74         $regexp = '(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t] 
    75         )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?: 
    76         \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:( 
    77         ?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[  
    78         \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0 
    79         31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\ 
    80         ](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+ 
    81         (?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?: 
    82         (?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z 
    83         |(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n) 
    84         ?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\ 
    85         r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ 
    86          \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n) 
    87         ?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t] 
    88         )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ 
    89          \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])* 
    90         )(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t] 
    91         )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*) 
    92         *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ 
    93         |\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r 
    94         \n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?: 
    95         \r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t 
    96         ]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031 
    97         ]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\]( 
    98         ?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(? 
    99         :(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(? 
    100         :\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(? 
    101         :(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)? 
    102         [ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\]  
    103         \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]| 
    104         \\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<> 
    105         @,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|" 
    106         (?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t] 
    107         )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ 
    108         ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(? 
    109         :[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[ 
    110         \]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000- 
    111         \031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|( 
    112         ?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,; 
    113         :\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([ 
    114         ^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\" 
    115         .\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\ 
    116         ]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\ 
    117         [\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\ 
    118         r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\]  
    119         \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\] 
    120         |\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0 
    121         00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\ 
    122         .|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@, 
    123         ;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(? 
    124         :[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])* 
    125         (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\". 
    126         \[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[ 
    127         ^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\] 
    128         ]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*( 
    129         ?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ 
    130         ".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:( 
    131         ?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[ 
    132         \["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t 
    133         ])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t 
    134         ])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(? 
    135         :\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+| 
    136         \Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?: 
    137         [^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\ 
    138         ]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n) 
    139         ?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[" 
    140         ()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n) 
    141         ?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<> 
    142         @,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ 
    143          \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@, 
    144         ;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t] 
    145         )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ 
    146         ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)? 
    147         (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\". 
    148         \[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?: 
    149         \r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[ 
    150         "()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t]) 
    151         *))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]) 
    152         +|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\ 
    153         .(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z 
    154         |(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:( 
    155         ?:\r\n)?[ \t])*))*)?;\s*)'; 
    156          
    157         //$content = preg_replace($regexp, '', $content); 
    158         $content = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})', '<a href="mailto:\\1">\\1</a>', $content);         
     122    function midcom_helper_formatters_obfmaillinks($content, $echo_results=true) 
     123    { 
     124        $content = midcom_helper_formatters_maillinks($content,false); 
     125         
    159126        $content = preg_replace('/<a [^>]*href="mailto:([^"]+)"[^>]*>(.*?)<\/a>/ie', '_midcom_helper_formatters_obfuscate_email_link("\\1",false)', $content); 
    160127         
    161         echo $content; 
     128        if ($echo_results) 
     129        { 
     130            echo $content;             
     131        } 
     132        else 
     133        { 
     134            return $content; 
     135        } 
    162136    } 
    163137    _midcom_helper_formatters_register_filter('obfmaillinks'); 
     
    283257            '<',                                    // Less-than 
    284258            '&',                                    // Ampersand 
    285             '(c)', 
    286             '(tm)', 
    287             '(R)', 
    288             '--', 
    289             '-', 
    290             '*', 
    291             '£', 
     259            '(c)',                                  // Copyright 
     260            '(tm)',                                 // Trademark 
     261            '(R)',                                  // Registered 
     262            '--',                                   // mdash 
     263            '-',                                    // ndash 
     264            '*',                                    // Bullet 
     265            '£',                                    // Pound sign 
    292266            'EUR',                                  // Euro sign. € ? 
    293267            '',                                     // Unknown/unhandled entities 
     
    307281} 
    308282 
     283if (!function_exists('midcom_helper_formatters_noimages')) 
     284{ 
     285    function midcom_helper_formatters_noimages($content, $echo_results=true) 
     286    { 
     287        echo "{$content}"; 
     288        echo "<br/>------<br/>"; 
     289         
     290        $search = array 
     291        ( 
     292            '/<img [^>]*src="([^"]+)"[^>]*alt="([^"]+)"[^>]*>/is', 
     293            '/<img [^>]*src="([^"]+)"[^>]*[^>]*>/is', 
     294        ); 
     295        $replace = array 
     296        ( 
     297            _midcom_helper_formatters_noimages_link('\\1','\\2'), 
     298            _midcom_helper_formatters_noimages_link('\\1'), 
     299        ); 
     300         
     301        $content = preg_replace($search, $replace, $content); 
     302         
     303        if ($echo_results) 
     304        { 
     305            echo $content; 
     306        } 
     307        else 
     308        { 
     309            return $content; 
     310        } 
     311    } 
     312    _midcom_helper_formatters_register_filter('noimages'); 
     313     
     314    function _midcom_helper_formatters_noimages_link($url, $title='') 
     315    { 
     316        $link = ''; 
     317        if (empty($url)) 
     318        { 
     319            return $link; 
     320        } 
     321 
     322        if (   empty($title) 
     323            || $title == $url) 
     324        { 
     325            $url_parts = explode('/',$url); 
     326            $title = $url_parts[(count($url_parts)-1)]; 
     327        } 
     328         
     329        $link = "<a href=\"{$url}\" title=\"{$title}\">{$title}</a>"; 
     330         
     331        return $link; 
     332    } 
     333} 
     334 
     335/** 
     336 * Chained 
     337**/ 
     338 
     339function midcom_helper_formatters_links_and_obfmaillinks($content) 
     340{ 
     341    $content = midcom_helper_formatters_obfmaillinks($content, false); 
     342    $content = midcom_helper_formatters_links($content, false); 
     343     
     344    echo $content; 
     345} 
     346_midcom_helper_formatters_register_filter('linksobfmails','midcom_helper_formatters_links_and_obfmaillinks'); 
     347 
     348function midcom_helper_formatters_links_and_maillinks($content) 
     349{ 
     350    $content = mgd_format($content, 'xmaillink'); 
     351    $content = mgd_format($content, 'xlinks'); 
     352     
     353    echo $content; 
     354} 
     355_midcom_helper_formatters_register_filter('linksmails','midcom_helper_formatters_links_and_maillinks'); 
     356 
    309357/** 
    310358 * Helpers