Парсинг зашифрованных email [email_protected]

Discussion in 'Песочница' started by blackice777, 14 Apr 2016.

  1. blackice777

    blackice777 New Member

    Joined:
    11 Apr 2016
    Messages:
    5
    Likes Received:
    2
    Reputations:
    1
    На некоторых сайтах стоит защита от парсинга email, на сайте они отображаются нормально, но в коде выглядят так:

    HTML:
    <p><a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="650317040b160d0c1f0406091007250208040c094b060a08">[email&#160;protected]</a></p>
    
    И при парсинге мы получаем вместо email: [email&#160;protected]

    Решил написать функцию на php для преобразования закодированных таким образом email к нормальному виду, может кому пригодится:

    PHP:
        function emailDecode($email_encoded){
            for(
    $e = '', $r = hexdec('0x' . substr($email_encoded, 0, 2)), $n = 2; strlen($email_encoded) - $n; $n += 2){
                
    $e .= '%' . substr('0' . dechex(hexdec('0x' . substr($email_encoded, $n, 2)) ^ $r), -2);
            }
            return 
    urldecode($e);
        }
    Пример работы при использовании simple_html_dom:
    PHP:
    <?php
        
    require_once('/simplehtmldom_1_5/simple_html_dom.php');
        
    $html = file_get_html('htpp://сайт');
        
    $email_encoded = $html->find('.__cf_email__', 0)->getAttribute('data-cfemail');
        
    $email = emailDecode($email_encoded);
        die(
    $email);

        function 
    emailDecode($email_encoded){
            for(
    $e = '', $r = hexdec('0x' . substr($email_encoded, 0, 2)), $n = 2; strlen($email_encoded) - $n; $n += 2){
                
    $e .= '%' . substr('0' . dechex(hexdec('0x' . substr($email_encoded, $n, 2)) ^ $r), -2);
            }
            return 
    urldecode($e);
        }
     
    #1 blackice777, 14 Apr 2016
    Last edited: 14 Apr 2016
    kaskad and vylegzhanin like this.