2012-09-25 12 views
8

क्या कोई PHP केवल ईमेल पता obfuscator फ़ंक्शन है? वेब पर पाए गए अधिकांश जेएस और PHP का मिश्रण हैं।एक PHP केवल ईमेल पता खोज रहे हैं obfuscator function

+0

आप एक कैप्चा कि आप वास्तविक ईमेल पता है इससे पहले कि भरने की जरूरत है मतलब आपको भेजा गया? ;) –

उत्तर

9

यहां कुछ फ़ंक्शन हैं जिनका उपयोग मैं करता हूं।

पहले एक एचटीएमएल चरित्र कोड का उपयोग कर ईमेल पते obfuscates:

function getObfuscatedEmailAddress($email) 
{ 
    $alwaysEncode = array('.', ':', '@'); 

    $result = ''; 

    // Encode string using oct and hex character codes 
    for ($i = 0; $i < strlen($email); $i++) 
    { 
     // Encode 25% of characters including several that always should be encoded 
     if (in_array($email[$i], $alwaysEncode) || mt_rand(1, 100) < 25) 
     { 
      if (mt_rand(0, 1)) 
      { 
       $result .= '&#' . ord($email[$i]) . ';'; 
      } 
      else 
      { 
       $result .= '&#x' . dechex(ord($email[$i])) . ';'; 
      } 
     } 
     else 
     { 
      $result .= $email[$i]; 
     } 
    } 

    return $result; 
} 

उदाहरण:

echo getObfuscatedEmailAddress('[email protected]'); 
--> 
firstn&#x61;m&#x65;&#x2e;la&#115;t-name&#x40;examp&#108;e&#46;&#x63;om 

दूसरा एक वापस आ जाएगी लिंक ईमेल पता दोनों एचटीएमएल और यूआरएल इनकोडिंग है जहां:

function getObfuscatedEmailLink($email, $params = array()) 
{ 
    if (!is_array($params)) 
    { 
     $params = array(); 
    } 

    // Tell search engines to ignore obfuscated uri 
    if (!isset($params['rel'])) 
    { 
     $params['rel'] = 'nofollow'; 
    } 

    $neverEncode = array('.', '@', '+'); // Don't encode those as not fully supported by IE & Chrome 

    $urlEncodedEmail = ''; 
    for ($i = 0; $i < strlen($email); $i++) 
    { 
     // Encode 25% of characters 
     if (!in_array($email[$i], $neverEncode) && mt_rand(1, 100) < 25) 
     { 
      $charCode = ord($email[$i]); 
      $urlEncodedEmail .= '%'; 
      $urlEncodedEmail .= dechex(($charCode >> 4) & 0xF); 
      $urlEncodedEmail .= dechex($charCode & 0xF); 
     } 
     else 
     { 
      $urlEncodedEmail .= $email[$i]; 
     } 
    } 

    $obfuscatedEmail = getObfuscatedEmailAddress($email); 
    $obfuscatedEmailUrl = getObfuscatedEmailAddress('mailto:' . $urlEncodedEmail); 

    $link = '<a href="' . $obfuscatedEmailUrl . '"'; 
    foreach ($params as $param => $value) 
    { 
     $link .= ' ' . $param . '="' . htmlspecialchars($value). '"'; 
    } 
    $link .= '>' . $obfuscatedEmail . '</a>'; 

    return $link; 
} 

उदाहरण:

echo getObfuscatedEmailLink('[email protected]'); 
--> 
<a href="mailt&#111;&#58;%66i&#37;72stna%&#54;d&#x65;&#46;&#37;6c&#x25;6&#x31;st&#x2d;name&#64;&#101;&#x78;&#x61;mple&#46;co&#109;" rel="nofollow">f&#x69;&#114;s&#x74;na&#109;e&#x2e;&#108;a&#x73;t-name&#64;e&#x78;ample&#46;co&#109;</a> 
+0

दिलचस्प दृष्टिकोण +1। लेकिन इसमें कुछ अनुकूल मुद्दे हो सकते हैं। –

+0

मैंने सफारी और मोबाइल ब्राउज़र में इसका परीक्षण नहीं किया है। एफएफ, आईई, क्रोम अच्छे हैं। –

+0

ठीक है - इसे आज़माएं :-) –

12

मेरे fav:

मार्कअप + पीएचपी

<span class="rev"><?php echo strrev($email); ?> </span> 

सीएसएस

.rev{ 
    direction: rtl; 
    unicode-bidi: bidi-override; 
} 

Fiddle

+1

शानदार! ईमेल/प्रतिलिपि बनाने पर यह कोई विचार कैसे रखता है? –

+0

@AakilFernandes fiddle देखें: (( – moonwave99

+0

आह, यह मेरी चिंता थी। अभी भी एक अच्छी चाल है। –

1

यहाँ एक पीएचपी 7 के साथ है प्रकार- हिंट।

बस $this->obfuscateEmail($email);

/** 
* @param string $email 
* @return string 
*/ 
private function obfuscateEmail(string $email) : string 
{ 
    $em = explode("@", $email); 
    $name = implode(array_slice($em, 0, count($em) - 1), '@'); 
    $len = floor(strlen($name)/2); 

    return substr($name, 0, $len) . str_repeat('*', $len) . "@" . end($em); 
} 
0

यहाँ एक वैकल्पिक तरीका से कॉल करने की स्थिति में वहाँ मेजबान से पहले एक चरित्र है:

/** 
* @param string $email 
* @return string 
*/ 

private function obfuscateEmail($email) 
{ 
    $em = explode("@", $email); 

    $name = implode(array_slice($em, 0, count($em)-1), '@'); 

    if(strlen($name)==1){ 
     return '*'.'@'.end($em); 
    } 

    $len = floor(strlen($name)/2); 

    return substr($name,0, $len) . str_repeat('*', $len) . "@" . end($em); 
} 
संबंधित मुद्दे