วิธีที่มีประสิทธิภาพในการซ่อนอีเมลจากบ็อตสแปม


196

ในหน้าแรกของฉันฉันใช้วิธีนี้เพื่อซ่อนอีเมลของฉันจากบอทสแปม:

<a href="admin [at] example.com"
   rel="nofollow"
   onclick="this.href='mailto:' + 'admin' + '@' + 'example.com'">Contact me</a>

คุณคิดยังไงกับเรื่องนี้? มันมีประสิทธิภาพหรือไม่ คุณรู้จักหรือใช้วิธีการอื่นใด


อาจเป็นเพราะซ้ำกับstackoverflow.com/questions/163628/…หรืออีกอันหนึ่งนั้นไม่ถูกต้องเพราะเป็นรายการวิกิยาวชุมชนที่ไม่ใช่วิกิ
Ciro Santilli 郝海东冠状病六四事件法轮功

5
อันนี้มี upvotes คำตอบและมุมมองเพิ่มเติม ไม่ควรปิดในความโปรดปรานของผู้อื่นที่มี upvotes คำตอบและมุมมองที่น้อยลง
abatishchev

1
ฉันจะปิดตัวลงเพื่อติดตามความจริงอันนี้ดึงดูดมากขึ้น
abatishchev

6
ทางออกที่ดีที่สุดคือการไม่ได้ที่จะร่วมกันแก้ปัญหาของคุณ น่าเสียดายที่นี่เป็นคำถามแบบนั้น วิธีที่ดีที่สุดคือหาวิธีแก้ปัญหาของคุณ หากใครได้รับมาตรฐานสแปมบอทจะถูกปรับให้เอาชนะมัน
Dimitris

1
ทางออกที่ดีที่สุดคือการรวมวิธีแก้ปัญหาต่าง ๆ ไว้ด้านล่างเช่นส่วนแรกของอีเมลเป็นรูปภาพส่วนที่สองการthis.href.replace(/x/g,'')เข้ารหัส hex ส่วนที่สาม ฯลฯ ไม่มีบอทสแปมไม่ว่าฉลาดจะลองวิธีถอดรหัสที่แตกต่างกันในส่วนต่าง ๆ ของ ที่อยู่อีเมล.

คำตอบ:


98

นี่คือวิธีที่ฉันใช้กับฝั่งเซิร์ฟเวอร์รวมเช่น<!--#include file="emailObfuscator.include" -->ที่emailObfuscator.includeมีต่อไปนี้:

<!-- // http://lists.evolt.org/archive/Week-of-Mon-20040202/154813.html -->
<script type="text/javascript">
    function gen_mail_to_link(lhs,rhs,subject) {
        document.write("<a href=\"mailto");
        document.write(":" + lhs + "@");
        document.write(rhs + "?subject=" + subject + "\">" + lhs + "@" + rhs + "<\/a>");
    }
</script>

ในการรวมที่อยู่ฉันใช้ JavaScript:

<script type="text/javascript"> 
    gen_mail_to_link('john.doe','example.com','Feedback about your site...');
</script>
<noscript>
  <em>Email address protected by JavaScript. Activate JavaScript to see the email.</em>
</noscript>

เนื่องจากฉันได้รับอีเมลผ่าน Gmail มาตั้งแต่ปี 2005 สแปมค่อนข้างเป็นปัญหา ดังนั้นฉันไม่สามารถพูดได้ว่าวิธีการนี้มีประสิทธิภาพเพียงใด คุณอาจต้องการอ่านการศึกษานี้ (แม้ว่าจะเก่า) ที่สร้างกราฟนี้:

ป้อนคำอธิบายรูปภาพที่นี่


ทำไมคุณต้องรวมฝั่งเซิร์ฟเวอร์ของemailObfuscator.include? มันจะไม่เหมือนกับการเขียนใน. html ธรรมดา (อาจเป็นเพียงตัวอย่าง) ทำไมคุณถึงใช้ความคิดเห็น html <!-- -->ภายในสคริปต์ และในที่สุดทำไมหนึ่งใน<script>แท็กของคุณเป็นตัวพิมพ์เล็กในขณะที่คนอื่น ๆ เป็นตัวพิมพ์ใหญ่<SCRIPT>? วิธีการเหล่านี้ช่วยให้บอทสับสนหรือเปล่า?
นักรบ

@Templar SSI ไม่จำเป็นและไม่ทำให้บอทสับสนเท่าที่ฉันรู้ มันทำให้ (ทำ) เว็บไซต์ของฉันแบบแยกส่วน (ไม่ใช้วิธีนี้อีกต่อไป) ความคิดเห็นอ้างแหล่งที่มาของที่ที่ฉันพบแฮ็ค (ตอนนี้เป็นลิงก์ที่ขาด) การเปลี่ยนแปลงในกรณีที่เป็นเพียงความบังเอิญ ถ้ามันทำให้บ็อตสับสนยิ่งดี แต่ฉันสงสัยว่ามันจะมีผลกระทบอะไร
Fuhrmanator

4
การศึกษาล่าสุดและเสร็จสิ้นการสำรวจความคิดเดียวกัน: grall.name/posts/1/antiSpam-emailAddressObfuscation.html
Lucas Cimon

96

การทำงานกับเนื้อหาและ attr ใน CSS:

.cryptedmail:after {
  content: attr(data-name) "@" attr(data-domain) "." attr(data-tld); 
}
<a href="#" class="cryptedmail"
   data-name="info"
   data-domain="example"
   data-tld="org"
   onclick="window.location.href = 'mailto:' + this.dataset.name + '@' + this.dataset.domain + '.' + this.dataset.tld; return false;"></a>

เมื่อปิดการใช้งานจาวาสคริปต์เพียงคลิกเหตุการณ์จะไม่ทำงานอีเมลจะยังคงปรากฏ

อีกวิธีที่น่าสนใจ (อย่างน้อยไม่มีเหตุการณ์คลิก) คือการใช้ประโยชน์จากขวาไปซ้ายเพื่อแทนที่ทิศทางการเขียน เพิ่มเติมเกี่ยวกับสิ่งนี้: https://en.wikipedia.org/wiki/Right-to-left_mark


6
สิ่งนี้ต้องการยกนิ้วให้มากกว่านี้
heXer

ไม่แน่ใจว่าทำไม แต่ถึงแม้ว่าวิธีนี้จะดูน่าประทับใจทีเดียว แต่ก็ไม่สามารถทริกเกอร์ไคลเอนต์อีเมลของฉันได้ นี่คือซอที่ให้คุณทดสอบด้วย: jsfiddle.net/wd436tg3
Ricardo Zea

1
@RicardoZea คุณใช้เบราว์เซอร์ใด ซอของคุณทำงานได้ดีสำหรับฉันใน chrome, ie11, edge และ firefox
cyptus

3
น่ากลัว แต่ผนวก a "; return false" ไปยัง onclick-event วิธีนี้จะป้องกันการเพิ่ม # ไปยัง URL เบราว์เซอร์ที่น่าเกลียด (โดยการยกเลิกลิงก์ href-link ดั้งเดิม)
T4NK3R

5
อย่างไร - ฉันไม่สามารถคัดลอกที่อยู่อีเมล (มองเห็นได้) ด้วยตนเอง (ใน Chrome, Firefox หรือ Edge)
T4NK3R

83

มาดูทางนี้ดูฉลาดและใช้ css

CSS

span.reverse {
  unicode-bidi: bidi-override;
  direction: rtl;
}

HTML

<span class="reverse">moc.rehtrebttam@retsambew</span>

CSS ด้านบนจะแทนที่ทิศทางการอ่านและนำเสนอข้อความให้กับผู้ใช้ตามลำดับที่ถูกต้อง

หวังว่ามันจะช่วย

ไชโย


54
มันตลกอย่างแน่นอน แต่น่าเสียดายที่นี่ไม่สามารถคลิกได้และจะไม่ทำงานสำหรับการคัดลอก / วางในขณะที่ละเลยเบราว์เซอร์ที่ไม่ใช่ CSS เช่นเครื่องอ่านอักษรเบรลล์
Arjan

อืมดี แต่เมื่อคนที่เขียนโปรแกรมรวบรวมข้อมูลเห็นมันก็ไร้ประโยชน์
เมา

6
การจับคู่ที่อยู่อีเมลย้อนกลับกับ RegEx นั้นง่ายเหมือนการจับคู่กับที่ไม่ถูกย้อนกลับ สแปมเป็นธุรกิจที่มีมูลค่าหลายพันล้านดอลล่าร์และผู้ส่งสแปมนั้นไม่ได้ใช้วงจร CPU ของตัวเองในการขูดหน้าจอ ที่จริงแล้วพวกเขาได้อ่านบทสนทนานี้แล้วและได้ปรับวิธีการของพวกเขาตามนั้น สิ่งที่คอมพิวเตอร์สามารถอ่านได้จะถูกบอตอ่านได้ ไม่ว่าจะถูกดำเนินการโดย CSS หรือ JavaScript
Jani Hyytiäinen

3
@ JaniHyytiäinenฉันไม่เห็นด้วย ความจริงที่ว่าพวกเขาไม่ได้จ่ายค่า CPU ไม่ได้หมายความว่าพวกเขามีทรัพยากรไม่ จำกัด หากใช้ล่าม JS จะทำให้ที่อยู่มีค่าใช้จ่ายน้อยเกินไปพวกเขาจะปิดใช้งาน
o0 '

1
@Lohoris: Google รายงานความเร็วในการโหลดหน้าเว็บโดยเฉลี่ย (2.45s) และขนาดหน้าเฉลี่ย (320KB) ทำให้คุณมีความคิดในการแยกวิเคราะห์ที่คุณสามารถทำได้ ในขณะที่เธรดการดาวน์โหลดกำลังดำเนินการตามคำขอเธรดการแยกวิเคราะห์สามารถทำการแยกวิเคราะห์ การดาวน์โหลดส่วนใหญ่กำลังรออยู่ ซึ่งจะทำให้เธรด dl สามารถตรวจสอบสิ่งที่จำเป็นต้องมีก่อนที่จะตัดสินใจส่งไปยังตัวแยกวิเคราะห์ เช่นหน้าการแสดงผล indexOf ('@'), indexOf ('mailto:') ฯลฯ เธรดการแยกวิเคราะห์จะได้รับเพียง + -200 ตัวอักษรรอบการแข่งขันซึ่งจะช่วยให้การแยกวิเคราะห์ที่ซับซ้อนจนมัน 'ปรากฏ' จะไม่มีที่สิ้นสุดใน แง่ของการแยกวิเคราะห์พลังงาน
Jani Hyytiäinen

52

ฉันมีสิ่งที่แตกต่างอย่างสิ้นเชิงกับเรื่องนี้ ฉันใช้MailHideสำหรับสิ่งนี้

MailHide เป็นระบบจาก Google ที่ผู้ใช้ต้องทำการทดสอบ reCAPTCHA เพื่อให้เปิดเผยอีเมล


15
แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงมีการเปลี่ยนแปลง
showdev

5
แม้ว่าโดยทั่วไปฉันจะเห็นด้วยกับความรู้สึกนี้ แต่ในกรณีนี้คำตอบคือใช้เครื่องมือเฉพาะ หากลิงก์หายไปฉันจะลบคำตอบ
tvanfosson

ขอบคุณ - นี่เยี่ยมมาก ฉันกำลังเขียนสิ่งนี้ (เปิดเผยคือลิงก์): ส่งอีเมลถึงฉัน: เปิดเผย
chrs

6
โปรดทราบว่า Google ปิดการใช้งาน MailHide เมื่อเทียบกับปี 2018 เช่นเดียวกับบริการของ Google "ฟรี": พวกเขาให้บริการตราบเท่าที่พวกเขาสามารถทำกำไรด้วยข้อมูลจากมันและเมื่อพวกเขาได้รับสิ่งที่พวกเขาต้องการ บริษัท ที่ไม่น่าเชื่อถือส่วนใหญ่ให้บริการฟรี ฉันจะอยู่ห่างจากบริการของ Google หรือใครก็ตามหากคุณต้องการถ่ายทอดสิ่งที่คุณพยายามจะทำ
masi

51

ไม่ใช่ความคิดของฉัน แต่แรกเริ่มฉันไม่พบผู้แต่ง:

<a href="mailto:coxntact@domainx.com"
    onmouseover="this.href=this.href.replace(/x/g,'');">link</a>

เพิ่ม x มากเท่าที่คุณต้องการ มันทำงานได้อย่างสมบูรณ์แบบในการอ่านคัดลอกและวางและไม่สามารถอ่านได้โดยบ็อต


2
เรียบร้อย! แต่แล้วผู้ใช้มือถือล่ะ?
Bodzio

Mouseovers จะถูกทริกเกอร์เมื่อคุณแตะลิงค์ มันควรจะทำงานได้ดี
Andrew Swift

4
ทำงานได้ตราบใดที่ที่อยู่ของคุณไม่มี x ใด ๆ :-p แต่ฉันรู้ว่าแค่ใช้ตัวอักษรอื่น
Dan Henderson

1
แต่ถ้า javascript ถูกปิดการใช้งานคุณกำลังแสดงผู้ใช้โดยไม่มีที่อยู่ซึ่งจะเด้งกลับมาทำให้คุณสูญเสียลูกค้า / ผู้ใช้
Xeevis

34
หากปิดการใช้งานจาวาสคริปต์เว็บไซต์ของฉันจะไม่ทำงานเลย ;-)
Andrew Swift

16

ฉันคิดว่าวิธีที่ไม่สามารถป้องกันได้อย่างเดียวที่คุณสามารถทำได้คือการสร้างหน้า Contact Me ซึ่งเป็นรูปแบบที่ส่งไปยังสคริปต์ที่ส่งไปยังที่อยู่อีเมลของคุณ ด้วยวิธีนี้ที่อยู่ของคุณจะไม่ถูกเปิดเผยต่อสาธารณะเลย นี่อาจไม่เป็นที่พึงปรารถนาด้วยเหตุผลบางอย่าง แต่ฉันคิดว่ามันเป็นทางออกที่ดีทีเดียว มันมักจะทำให้ฉันรำคาญเมื่อฉันถูกบังคับให้คัดลอก / วางที่อยู่อีเมลของใครบางคนจากเว็บไซต์ของพวกเขาไปยังโปรแกรมรับส่งเมลและส่งข้อความถึงพวกเขา ฉันต้องการทำผ่านแบบฟอร์มบนเว็บไซต์ของพวกเขา นอกจากนี้วิธีการนี้ยังช่วยให้คุณสามารถส่งความคิดเห็นที่ไม่ระบุตัวตนส่งถึงคุณเป็นต้นโปรดตรวจสอบให้แน่ใจว่าได้ปกป้องฟอร์มของคุณโดยใช้รูปแบบการต่อต้านบอทเช่น captcha มีคนมากมายพูดคุยเกี่ยวกับเรื่องนี้ใน SO


6
ปัญหาเดียวของปัญหานี้คือคุณไม่มีสำเนาข้อความที่คุณส่งยกเว้นว่าคุณใช้เวลาในการคัดลอกและวางไว้ที่อื่น โดยส่วนตัวแล้วฉันไม่รังเกียจที่จะคัดลอกและวาง แต่ทำเพื่อตนเอง
gvkv

6
สำหรับผู้ส่งที่ไม่มีสำเนา: สำหรับหลายรูปแบบบนเว็บฉันชอบตัวเลือกในการรับสำเนาด้วยตัวเอง แต่มักจะตัวเลือกดังกล่าวจะช่วยให้การทำผิดกฎโดยไม่ระบุชื่อสำหรับการส่งข้อความไปยังทุกคนเพียงแค่ ...
Arjan

12
วิธีนี้อาจซ่อนที่อยู่อีเมลของคุณ แต่จะไม่หยุดสแปมเลยเว้นแต่ว่าคุณจะได้รับแบบฟอร์มการตรวจสอบความถูกต้องของภาพของคุณ
SimonDowdles

1
คุณยังสามารถแก้ปัญหาของผู้ส่งที่ไม่มีสำเนาโดยรวมถึงตัวเลือกในการส่งไปให้พวกเขาเช่นกัน
steinybot

1
ตัวเลือก "ส่งสำเนาถึงตัวคุณเอง" - เปลี่ยนรูปแบบเป็นสแปมได้อย่างมีประสิทธิภาพโดยที่คุณเป็นผู้ส่ง - ความคิดที่ไม่ดี!
T4NK3R

15

ดูการทำให้ที่อยู่อีเมลปลอดภัยจากบอทบนหน้าเว็บหรือไม่

ฉันชอบวิธีที่ Facebook และอื่น ๆ แสดงภาพที่อยู่อีเมลของคุณ

ฉันเคยใช้The Enkoderในอดีต - คิดว่ามันดีมากที่จะซื่อสัตย์!


11

หากคุณมีการสนับสนุน php คุณสามารถทำสิ่งนี้:

<img src="scriptname.php">

และ scriptname.php:

<?php
header("Content-type: image/png");
// Your email address which will be shown in the image
$email    =    "you@yourdomain.com";
$length    =    (strlen($email)*8);
$im = @ImageCreate ($length, 20)
     or die ("Kann keinen neuen GD-Bild-Stream erzeugen");
$background_color = ImageColorAllocate ($im, 255, 255, 255); // White: 255,255,255
$text_color = ImageColorAllocate ($im, 55, 103, 122);
imagestring($im, 3,5,2,$email, $text_color);
imagepng ($im);
?>

1
แทนที่จะใช้ php คุณสามารถสร้างภาพได้ และเช่นเดียวกับ css invert คุณยังคงมีปัญหาในการไม่สามารถคลิกได้และไม่สามารถคัดลอกได้เว้นแต่จะใช้ปากกา: P
Claudiu

9

ฉันรู้ว่าคำตอบของฉันจะไม่ถูกใจหลายคน แต่โปรดพิจารณาประเด็นที่อธิบายไว้ที่นี่ก่อนที่จะย่อลงมา

สิ่งใดที่เครื่องอ่านได้อย่างง่ายดายจะทำให้เครื่องส่งข้อความขยะสามารถอ่านได้โดยง่าย แม้ว่าการกระทำของพวกเขาจะดูโง่สำหรับเราพวกเขาไม่ใช่คนโง่ พวกเขาเป็นนวัตกรรมและความมั่งคั่ง พวกเขาไม่เพียงใช้บ็อตเพื่อเก็บอีเมล แต่ยังมีวิธีการมากมายในการกำจัดและนอกจากนั้นพวกเขาก็จ่ายเงินเพื่อรับอีเมลใหม่ ๆ หมายความว่าอะไรพวกเขามีแฮ็กเกอร์แฮ็กสีดำหลายพันคนทั่วโลกเพื่อทำงานของพวกเขา ผู้คนพร้อมที่จะโค้ดมัลแวร์ที่ขูดหน้าจอของเบราว์เซอร์ของผู้อื่นซึ่งทำให้วิธีการใดก็ตามที่คุณพยายามทำให้ไร้ประโยชน์นั้นในที่สุด กระทู้นี้มีผู้อ่านมากกว่า 10 คนและพวกเขาหัวเราะเยาะเรา บางคนอาจรู้สึกเบื่อที่จะรู้ว่าเราไม่สามารถท้าทายพวกเขาใหม่ได้

โปรดทราบว่าในที่สุดคุณไม่ได้พยายามประหยัดเวลา แต่เป็นเวลาของคนอื่น ด้วยเหตุนี้โปรดพิจารณาใช้เวลาเพิ่มที่นี่ ไม่มีเวทย์มนตร์ที่ง่ายต่อการดำเนินการที่จะทำงานได้ หากคุณทำงานใน บริษัท ที่เผยแพร่อีเมลของคน 100 คนบนเว็บไซต์และคุณสามารถลดอีเมลขยะ 1 ฉบับต่อวันต่อคนต่อคนเรากำลังพูดถึงอีเมลขยะจำนวน 36,500 ฉบับต่อปี หากการลบอีเมลดังกล่าวใช้เวลาโดยเฉลี่ย 5 วินาทีเรากำลังพูดถึงประมาณ 50 ชั่วโมงทำงานทุกปี ไม่ต้องพูดถึงปริมาณการรบกวนที่ลดลง ดังนั้นทำไมไม่ใช้เวลาสองสามชั่วโมงนี้

ไม่เพียง แต่คุณและผู้ที่ได้รับอีเมลที่พิจารณาเวลาสินทรัพย์ ดังนั้นคุณต้องหาวิธีทำให้งงงวยที่อยู่อีเมลด้วยวิธีการดังกล่าวซึ่งไม่ได้เป็นการจ่ายเพื่อทำการถอดรหัส หากคุณใช้วิธีการที่ใช้กันอย่างแพร่หลายเพื่อทำให้อีเมล์สับสน ด้วยเหตุนี้แครกเกอร์จะได้รับอีเมล์เป็นพันหากไม่ใช่อีเมลสดนับหมื่นหรือหลายแสน และสำหรับพวกเขาพวกเขาจะได้รับเงิน

ดังนั้นไปข้างหน้าและรหัสวิธีการของคุณเอง นี่เป็นกรณีที่เกิดขึ้นได้ยากซึ่งการคิดค้นล้อใหม่จ่ายจริง ใช้วิธีการที่ไม่สามารถอ่านได้ด้วยเครื่องและวิธีที่ต้องการการโต้ตอบกับผู้ใช้โดยไม่ทำให้ประสบการณ์การใช้งานลดลง

ฉันใช้เวลาประมาณ 20 นาทีเพื่อเขียนโค้ดตัวอย่างสิ่งที่ฉันหมายถึง ในตัวอย่างฉันใช้ KnockoutJS เพียงเพราะฉันชอบและฉันรู้ว่าคุณคงไม่ใช้มันด้วยตัวเอง แต่มันก็ไม่เกี่ยวข้องเลย มันเป็นโซลูชันที่กำหนดเองซึ่งไม่ได้ใช้กันอย่างแพร่หลาย แคร็กมันจะไม่ให้รางวัลสำหรับการทำเช่นนี้เพราะวิธีการทำมันจะทำงานบนหน้าเดียวในอินเทอร์เน็ตมากมาย

นี่คือซอ: http://jsfiddle.net/hzaw6/

รหัสด้านล่างไม่ได้เป็นตัวอย่างของรหัสที่ดี แต่เป็นเพียงตัวอย่างรหัสย่อที่ยากมากสำหรับเครื่องที่จะเข้าใจว่าเราจัดการกับอีเมลได้ที่นี่ และแม้ว่าจะสามารถทำได้ก็ไม่ต้องจ่ายเพื่อดำเนินการในขนาดใหญ่

และใช่ฉันรู้ว่ามันใช้ไม่ได้กับ IE = lte8 เพราะ 'ไม่สามารถรับคุณสมบัติ' ของการอ้างอิงที่ไม่ได้กำหนดหรือการอ้างอิง null 'แต่ฉันไม่สนใจเพราะมันเป็นเพียงตัวอย่างของวิธีการไม่ใช่การใช้งานจริง และไม่ได้ตั้งใจที่จะใช้ในการผลิตเหมือนเดิม รู้สึกอิสระที่จะเขียนโค้ดของคุณเองซึ่งเย็นกว่าแข็งกว่าเทคนิค ฯลฯ

โอ้และไม่เคยตั้งชื่ออีเมลหรืออีเมลใน html หรือ javascript มันเป็นวิธีที่ง่ายเกินไปที่จะขูด DOM และวัตถุหน้าต่างสำหรับชื่ออีเมลหรืออีเมลและตรวจสอบว่ามีสิ่งที่ตรงกับอีเมลหรือไม่ นี่คือเหตุผลที่คุณไม่ต้องการตัวแปรใด ๆ ที่จะมีอีเมลในแบบเต็มรูปแบบและนี่คือสาเหตุที่คุณต้องการให้ผู้ใช้โต้ตอบกับหน้าเว็บก่อนที่คุณจะกำหนดตัวแปรดังกล่าว หากโมเดลวัตถุ javascript ของคุณมีที่อยู่อีเมลใด ๆ ในสถานะพร้อมใช้ DOM คุณจะเปิดเผยที่อยู่เหล่านั้นแก่ผู้ส่งอีเมลขยะ

HTML:

<div data-bind="foreach: contacts">
    <div class="contact">
        <div>
            <h5 data-bind="text: firstName + ' ' + lastName + ' / ' + department"></h5>
            <ul>
                <li>Phone: <span data-bind="text: phone"></span></li>
                <li><a href="#999" data-bind="click:$root.reveal">E-mail</a> <span data-bind="visible: $root.msgMeToThis() != ''"><input class="merged" data-bind="value: mPrefix" readonly="readonly" /><span data-bind="text: '@' + domain"></span></span></li>
            </ul>
        </div>
    </div>
</div>

JS

function ViewModel(){
    var self = this;

    self.contacts = ko.observableArray([
        { firstName:'John', mPrefix: 'john.doe', domain: 'domain.com', lastName: 'Doe', department: 'Sales', phone: '+358 12 345 6789' },
        { firstName:'Joe', mPrefix: 'joe.w', domain: 'wonder.com', lastName: 'Wonder', department: 'Time wasting', phone: '+358 98 765 4321' },
        { firstName:'Mike', mPrefix: 'yo', domain: 'rappin.com', lastName: 'Rophone', department: 'Audio', phone: '+358 11 222 3333' }
    ]);
    self.msgMeToThis = ko.observable('');
    self.reveal = function(m, e){
        var name = e.target.attributes.href.value;
        name = name.replace('#', '');
        self.msgMeToThis(name);
    };
}
var viewModel = new ViewModel();
ko.applyBindings(viewModel);

8

หนึ่งในวิธีการโปรดของฉันคือการทำให้อีเมล์ยุ่งเหยิงโดยใช้ php ตัวอย่างคลาสสิกคือการแปลงอักขระเป็นค่า HEX ดังนี้:

function myobfiscate($emailaddress){
 $email= $emailaddress;                
 $length = strlen($email);                         
 for ($i = 0; $i < $length; $i++){                
 $obfuscatedEmail .= "&#" . ord($email[$i]).";";
 }
 echo $obfuscatedEmail;
}

จากนั้นในมาร์กอัปของฉันฉันจะเรียกมันดังนี้:

  <a href="mailto:<?php echo myobfiscate('someone@somewhere.com'); ?>"
title="Email me!"><?php echo myobfiscate('someone@somewhere.com');?> </a>

จากนั้นตรวจสอบแหล่งที่มาของคุณคุณจะประหลาดใจ!


นั่นเป็นตัวอย่างที่ดี ขอบคุณ เบาะแสใด ๆ กับ SpamBots ที่ใช้การถอดรหัส HEX?
jasonflaherty

7

คุณสามารถลองซ่อนอักขระโดยใช้เอนทิตี html ใน hexa (เช่น: & # x40 สำหรับ @) นี่เป็นทางออกที่สะดวกเนื่องจากเบราว์เซอร์ที่ถูกต้องจะแปลและคุณสามารถมีลิงก์ปกติ ข้อเสียคือบอทสามารถแปลได้ตามทฤษฎี แต่มันผิดปกติเล็กน้อย ฉันใช้สิ่งนี้เพื่อปกป้องอีเมลของฉันในบล็อกของฉัน

อีกวิธีหนึ่งคือการใช้จาวาสคริปต์เพื่อประกอบเป็นส่วนหนึ่งของที่อยู่และถอดรหัสที่อยู่ได้ทันที ข้อเสียคือเบราว์เซอร์ที่ปิดใช้งานจาวาสคริปต์จะไม่แสดงที่อยู่ของคุณ

ทางออกที่มีประสิทธิภาพมากที่สุดคือการใช้รูปภาพแต่มันเป็นความเจ็บปวดสำหรับผู้ใช้ที่จะต้องคัดลอกที่อยู่ด้วยมือ

โซลูชันของคุณค่อนข้างดีเนื่องจากคุณเพิ่มข้อเสียเปรียบ (เขียนด้วยตนเองเป็น @) เฉพาะสำหรับผู้ใช้ที่ปิดใช้งานจาวาสคริปต์ คุณสามารถปลอดภัยยิ่งขึ้นด้วย:

onclick="this.href='mailto:' + 'admin' + '&#x40;' + 'domain.com'"

5

สแปมบอทจะไม่ตีความสิ่งนี้เพราะมันเป็นวิธีที่รู้จักกันน้อยกว่า :)

ก่อนอื่นให้กำหนด css:

email:before {
    content: "admin";
}

email:after {
    content: "@example.com";
}

ตอนนี้ทุกที่ที่คุณต้องการแสดงอีเมลของคุณเพียงแค่แทรก HTML ต่อไปนี้:

<div id="email"></div>

และธาดา!


ใช้งานได้ แต่ไม่รองรับการคัดลอกวางซึ่งอาจส่งผลต่อการใช้งานสำหรับผู้ใช้ส่วนใหญ่
Iruku Kagika

4

ฉันใช้การผสมผสานที่ง่ายมากของ CSS และ jQuery ซึ่งแสดงที่อยู่อีเมลให้กับผู้ใช้อย่างถูกต้องและยังทำงานได้เมื่อมีการคลิกหรือวางสมอ

HTML:

<a href="mailto:me@example.spam" id="lnkMail">moc.elpmaxe@em</a>

CSS:

#lnkMail {
    unicode-bidi: bidi-override;
    direction: rtl;
}

jQuery:

$('#lnkMail').hover(function(){
    // here you can use whatever replace you want
    var newHref = $(this).attr('href').replace('spam', 'com');
    $(this).attr('href', newHref);
});

นี่คือตัวอย่างการทำงาน


มันจะแสดงค่าที่ถูกต้องของ href ในแถบสถานะของเบราว์เซอร์เมื่อลิงก์อยู่เหนือหรือไม่
Nik O'Lai

ใช่มันจะแสดงค่าที่ถูกต้องของ href เมื่อลิงก์อยู่ในสถานะโฮเวอร์ นั่นเป็นเหตุผลที่ต้องใช้เมธอด jQuery .hover
Sergiu

น่าเสียดายที่ไม่มีมันไม่แสดงค่าที่ถูกต้องของ href อย่างน้อยที่สุดเมื่อคุณเลื่อนเมาส์ไปที่ลิงค์ในครั้งแรก (นั่นคือ me@example.spam) ในการโฮเวอร์ที่สองทุกอย่างก็โอเค ทดสอบด้วยลิงก์ของคุณเอง
Nik O'Lai

1
มันทำงานได้ใน Chrome และ IE ดูเหมือนว่าเฉพาะใน Firefox บนโฮเวอร์แรกแถบสถานะจะไม่ได้รับการอัปเดต ฉันจะพยายามหาวิธีแก้ปัญหาสำหรับ Firefox
Sergiu

1
ฉันเห็นฉันเห็นฉันชอบอันนี้จริงๆ
Eric Bishard

3

! - การเพิ่มสิ่งนี้สำหรับการอ้างอิงไม่ทราบว่าข้อมูลอาจล้าสมัยไปแล้ว แต่มันบอกวิธีแก้ปัญหาง่ายๆสองสามข้อที่ไม่ต้องการใช้สคริปต์ใด ๆ

หลังจากค้นหาสิ่งนี้ด้วยตัวเองฉันเจอหน้านี้ แต่ก็เจอหน้าเหล่านี้:

http://nadeausoftware.com/articles/2007/05/stop_spammer_email_harvesters_obfuscating_email_addresses

ลองสลับที่อยู่อีเมล

ตัวอย่าง HTML ธรรมดา:

<bdo dir="rtl">moc.elpmaxe@nosrep</bdo>
Result : person@example.com

ผลเช่นเดียวกันโดยใช้ CSS

CSS:
.reverse { unicode-bidi:bidi-override; direction:rtl; }
HTML:
<span class="reverse">moc.elpmaxe@nosrep</span>
Result : person@example.com

การรวมสิ่งนี้เข้ากับวิธีการใด ๆ ที่กล่าวถึงข้างต้นอาจทำให้มีประสิทธิภาพมากขึ้น


3

ทางออกหนึ่งที่ง่ายคือใช้เอนทิตี HTML แทนอักขระจริง ตัวอย่างเช่น "me@example.com" จะถูกแปลงเป็น:

<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#101;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;">email me</A>

2
ลองgoogle.se/search?q=HTML+entities+converterที่ควรจะทำให้คุณไม่ว่าง;)
grapefrukt

1
Google สามารถค้นหาหน้าเว็บของคุณได้มากมาย ตัวอย่างหนึ่ง: hp.vector.co.jp/authors/VA022023/javascript/…
Romain Linsolas

4
แต่บอตไม่สามารถ regex ได้อย่างง่ายดายเช่นกัน?
gargantuan

20
Ouch ตัวอย่าง me @ stack ... ควรเขียนให้ดีกว่าเป็น me@example.com, me@example.net หรือ me@example.org - เป็นชื่อโดเมนเดียวที่ไม่ใช่เจ้าของควรใช้ในตัวอย่าง!
Arjan

4
ไม่ค่อยมีประสิทธิภาพตามtechblog.tilllate.com/2008/07/20/…
Fuhrmanator

3

นี่คือเวอร์ชันการทำงานของฉัน:


สร้างที่เก็บด้วยข้อความสำรอง:

<div id="knock_knock">Activate JavaScript, please.</div>

และเพิ่มที่ด้านล่างของ DOM (wrt the rendering) ตัวอย่างต่อไปนี้:

<script>
  (function(d,id,lhs,rhs){
    d.getElementById(id).innerHTML = "<a rel=\"nofollow\" href=\"mailto"+":"+lhs+"@"+rhs+"\">"+"Mail"+"<\/a>";
  })(window.document, "knock_knock", "your.name", "example.com");
</script>

มันเพิ่มการเชื่อมโยงหลายมิติที่สร้างขึ้นไปยังภาชนะที่ระบุ:

<div id="knock_knock"><a rel="nofollow" href="your.name@example.com">Mail</a></div>

นอกจากนี้ที่นี่เป็นรุ่นย่อ:

<script>(function(d,i,l,r){d.getElementById(i).innerHTML="<a rel=\"nofollow\" href=\"mailto"+":"+l+"@"+r+"\">"+"Mail"+"<\/a>";})(window.document,"knock_knock","your.name","example.com");</script>

2

วิธีที่ดีที่สุดในการซ่อนที่อยู่อีเมลนั้นดีต่อไปจนกว่าโปรแกรมเมอร์ของบอทจะค้นพบ "การเข้ารหัส" และใช้อัลกอริทึมการถอดรหัส

ตัวเลือก JavaScript ใช้งานได้ไม่นานเนื่องจากมีตัวแปลซอฟต์แวร์รวบรวมข้อมูลจำนวนมาก JavaScript

ไม่มีคำตอบอิโม


มีซอฟต์แวร์รวบรวมข้อมูลตีความ JavaScript หรือไม่ วิธีการเข้ารหัส JavaScript ของฉันดูเหมือนว่าจะทำงานได้ดีสำหรับฉันในช่วงไม่กี่ปีที่ผ่านมา - อัตราสแปมของฉันค่อนข้างคงที่ ~ 4 / สัปดาห์ดังนั้นฉันจึงไม่กังวลเกี่ยวกับที่อยู่ของผู้อื่นที่ฉันมอบหมายให้ใช้วิธีนี้ ฉันควร?
เคฟ

เพื่อตรวจสอบว่ามันอาจไม่รวมจำนวนของโปรแกรมรวบรวมข้อมูล แต่ฉันถ้าฉันสร้างโปรแกรมรวบรวมข้อมูลอยู่ผมจะใช้ lib JavaScript :)
guerda

ความพยายามมากขึ้นกว่าที่คุณคิด
คนขี้ขลาดที่ไม่ระบุชื่อ

Google กำลังรวบรวมข้อมูลผ่าน JS บางตัวในขณะนี้
Alister Bulman

2

อาจมีบอทที่รู้จัก[at]และปลอมตัวเป็น@สัญลักษณ์ ดังนั้นนี่ไม่ใช่วิธีที่มีประสิทธิภาพจริงๆ

แน่ใจว่าคุณสามารถใช้การเข้ารหัสบางอย่างเช่นการเข้ารหัส URL หรือการอ้างอิงอักขระ HTML (หรือทั้งสองอย่าง):

// PHP example
// encodes every character using URL encoding (%hh)
function foo($str) {
    $retVal = '';
    $length = strlen($str);
    for ($i=0; $i<$length; $i++) $retVal.=sprintf('%%%X', ord($str[$i]));
    return $retVal;
}
// encodes every character into HTML character references (&#xhh;)
function bar($str) {
    $retVal = '';
    $length = strlen($str);
    for ($i=0; $i<$length; $i++) $retVal.=sprintf('&#x%X;', ord($str[$i]));
    return $retVal;
}

$email = 'user@example.com';
echo '<a href="'.bar('mailto:?to=' . foo(','.$email.'')).'">mail me</a>';

// output
// <a href="&#x6D;&#x61;&#x69;&#x6C;&#x74;&#x6F;&#x3A;&#x3F;&#x74;&#x6F;&#x3D;&#x25;&#x32;&#x43;&#x25;&#x37;&#x35;&#x25;&#x37;&#x33;&#x25;&#x36;&#x35;&#x25;&#x37;&#x32;&#x25;&#x34;&#x30;&#x25;&#x36;&#x35;&#x25;&#x37;&#x38;&#x25;&#x36;&#x31;&#x25;&#x36;&#x44;&#x25;&#x37;&#x30;&#x25;&#x36;&#x43;&#x25;&#x36;&#x35;&#x25;&#x32;&#x45;&#x25;&#x36;&#x33;&#x25;&#x36;&#x46;&#x25;&#x36;&#x44;">mail me</a>

แต่ตามกฎหมายที่จะใช้พวกเขาเบราว์เซอร์ / ไคลเอนต์อีเมลทุกคนควรจัดการการเข้ารหัสเหล่านี้ด้วย


ผู้ส่งอีเมลขยะเป็นคนที่ "ฉลาด" หลังจากหลายปีที่ผู้คนเพิ่ม [ที่] หรือ [dot] แทนไวยากรณ์แน่นอนว่าพวกเขาจะมีอัลกอริธึมที่เลือกรูปแบบเหล่านี้
SimonDowdles

สิ่งที่เกี่ยวกับการถอดรหัสค่า HEX เหล่านี้
jasonflaherty

2

ฉันเป็นแฟนพันธุ์แท้ของSpamSpan - มันเป็นสิ่งที่สับสน แต่ก็ยังสามารถถอดรหัสได้ถ้าปิดใช้งาน JS ดูเหมือนว่าจะใช้งานได้เช่นกันแม้ว่าฉันจะใช้งานเว็บไซต์นี้มานานประมาณหนึ่งปีเท่านั้น

นอกจากนี้ยังมีโมดูลสำหรับ Drupal ในการเปลี่ยนอีเมลให้เป็น SpamSpans โดยอัตโนมัติหากคุณต้องการ


1

ใช้งานได้ไหมถ้าฉันคลิกขวาที่ลิงก์และเลือก "คัดลอก URL"? ถ้าไม่ใช่มันไม่ใช่สถานการณ์ในอุดมคติ (ฉันไม่ค่อยคลิกลิงค์ mailto, ต้องการคัดลอกที่อยู่อีเมลและวางลงในแอปพลิเคชันอีเมลของฉันหรือที่ไหนก็ตามที่ฉันต้องการ ณ เวลาใดเวลาหนึ่ง)

ฉันเคยเป็นคนหวาดระแวงอย่างเป็นธรรมปกป้องที่อยู่อีเมลของฉันออนไลน์ (UseNet, เว็บและอื่น ๆ ) แต่วันนี้ฉันสงสัยว่า "เป้าหมายที่เป็นไปได้สำหรับสแปม" มากกว่าเดิมถูกสร้างขึ้นโดยจับคู่ส่วนภายในกับโดเมนโดยทางโปรแกรม ในบางครั้งฉันต้องใช้เมลเซิร์ฟเวอร์บันทึกของฉัน มีความพยายามในการส่งมอบไม่กี่ครั้งไปยังที่อยู่ที่ไม่มีอยู่ (รวมถึงเวอร์ชันที่ถูกตัดทอนของเหยื่อล่อสแปมที่ฉันห้อยอยู่บน UseNet ย้อนกลับไปในช่วงปลายยุค 90 เมื่อการคัดลอกที่อยู่แพร่หลายมาก)


1

หลังจากใช้เทคนิคมากมายฉันพบวิธีที่ง่ายและเป็นมิตรมากบอทค้นหา @ Símboloและเมื่อเร็ว ๆ นี้พวกเขาค้นหา [ที่] มดมันเป็นรูปแบบดังนั้นฉันจึงใช้ 2 เทคนิค

  1. ฉันเขียนอีเมลของฉันลงบนภาพเหมือน domaintolls ที่ใช้และทำงานได้อย่างสมบูรณ์หรือ
  2. เพื่อแทนที่Símbolo (@) ด้วยภาพเหมือน

@ แทนที่ และภาพ alt จะเป็น alt = "@" ดังนั้นบอทจะค้นหารูปภาพและมนุษย์คนใดจะเห็นมันเป็นที่อยู่ปกติดังนั้นหากเขาคัดลอกมันเขาจะคัดลอกอีเมลและงานจะไม่ถูกต้องดังนั้นรหัสจะเป็น

<p>myname<img src="http://www.traidnt.net/vb/images/mail2.gif" width="11" height="9" alt="@" />domain.com</p>

1

มีสคริปต์ PHP ใบอนุญาตเปิดที่จาวาสคริปต์เอาท์พุทที่เข้ารหัสอีเมลคือhttp://www.maurits.vdschee.nl/php_hide_email/ จากนั้นคุณสามารถเรียกใช้ฟังก์ชัน php ได้อย่างง่ายดายด้วยเมลที่ระบุว่าเป็นอาร์กิวเมนต์


1

ก่อนอื่นฉันต้องแน่ใจว่าที่อยู่อีเมลจะแสดงเฉพาะเมื่อคุณเปิดใช้งานจาวาสคริปต์ วิธีนี้ไม่มีข้อความธรรมดาที่สามารถอ่านได้โดยไม่ต้องใช้ javascript

ประการที่สองวิธีการใช้คุณลักษณะที่ปลอดภัยคือการอยู่ห่างจาก <button>แท็ก แท็กนี้ต้องการการแทรกข้อความระหว่างแท็กซึ่งทำให้สามารถอ่านได้ด้วยคอมพิวเตอร์ ลอง<input type="button">ใช้ตัวจัดการ javascript แทน onClick แทน จากนั้นใช้เทคนิคทั้งหมดที่กล่าวถึงโดย otherse เพื่อใช้สัญลักษณ์อีเมลที่ปลอดภัย

อีกตัวเลือกหนึ่งคือมีปุ่มที่มี "คลิกเพื่อดูที่อยู่อีเมล" เมื่อคลิกที่การเปลี่ยนแปลงนี้ลงในอีเมลรหัส (ตัวอักษรในรหัส HTML) ในอีกคลิกหนึ่งนี้จะเปลี่ยนเส้นทางไปยังฟังก์ชัน 'mailto: email'

แนวคิดสุดท้ายที่ไม่มีการถอดรหัสพร้อมที่อยู่อีเมลที่เลือกได้และไม่สามารถเลือกได้:

<html>
<body>
<script type="text/javascript">
      e1="@domain";
      e2="me";
      e3=".extension";
email_link="mailto:"+e2+e1+e3;
</script>
<input type="text" onClick="this.onClick=window.open(email_link);" value="Click for mail"/>
<input type="text" onClick="this.value=email;" value="Click for mail-address"/>
<input type="button" onClick="this.onClick=window.open(email_link);" value="Click for mail"/>
<input type="button" onClick="this.value=email;" value="Click for mail-address"/>
</body></html>

ดูว่านี่เป็นสิ่งที่คุณต้องการและรวมเข้ากับความคิดของผู้อื่นหรือไม่ คุณไม่สามารถแน่ใจได้เกินไป


2
โอ้ look - me@domain.extension - มีที่อยู่อีเมลข้อความล้วน
Alister Bulman

1

และฟังก์ชั่นของฉัน ฉันสร้างมันขึ้นมาโดยดูคำตอบที่อยู่ในหัวข้อนี้

 function antiboteEmail($email)
 {
        $html = '';

        $email = strrev($email);
        $randId = rand(1, 500);

        $html .= '<span id="addr-'.$randId.'" class="addr">[turn javascript on to see the e-mail]</span>';
        $html .= <<<EOD
                <script>
                $(document).ready(function(){

                    var addr = "$email";
                    addr = addr.split("").reverse().join("");
                    $("#addr-$randId").html("<a href=\"mailto:" + addr + "\">" + addr + " </a>");
                });
                </script>
EOD;

        return $html;
    }

มันใช้สองวิธี: ขวาไปซ้าย dir และ javascript วาง


1

ตัวเลือกที่ 1: แยกที่อยู่อีเมลออกเป็นหลายส่วนและสร้างอาร์เรย์ใน JavaScript จากส่วนเหล่านี้ ถัดไปเข้าร่วมส่วนเหล่านี้ในลำดับที่ถูกต้องและใช้คุณสมบัติ. innerHTML เพื่อเพิ่มที่อยู่อีเมลไปยังหน้าเว็บ

 <span id="email">  </span>   // blank tag

 <script>
 var parts = ["info", "XXXXabc", "com", "&#46;", "&#64;"];
 var email = parts[0] + parts[4] + parts[1] + parts[3] + parts[2];
 document.getElementById("email").innerHTML=email; 
 </script>

ตัวเลือกที่ 2: ใช้รูปภาพแทนข้อความอีเมล

เว็บไซต์ผู้สร้างรูปภาพจากข้อความ: http://www.chxo.com/labelgen/

ตัวเลือก 3: เราสามารถใช้ AT แทน "@" และ DOT แทน "."

เช่น:

 info(AT)XXXabc(DOT)com 

1
ฉันคิดว่าตัวเลือกที่ 1 ไม่ใช่ตัวเลือกที่ดี โปรแกรมแยกวิเคราะห์ที่ทำงานคู่กับบอตสามารถหาค่าของ innerHTML ได้อย่างง่ายดายและตัวเลือกที่ 3 อาจไม่ดีเช่นกันเนื่องจากบอตอัจฉริยะสามารถหาค่าได้ ฉันคิดว่าตัวเลือก 2 ดีที่สุด
John Sonderson

1

ฉันไม่ชอบผสม JavaScript และ HTML นั่นเป็นเหตุผลที่ฉันใช้โซลูชันนี้ มันใช้ได้ดีสำหรับฉันตอนนี้

แนวคิด : คุณสามารถทำให้มีความซับซ้อนมากขึ้นโดยการให้ข้อมูลที่เข้ารหัสในdata-attributes และถอดรหัสภายใน JS สิ่งนี้ทำได้โดยการเปลี่ยนตัวอักษรหรือเพียงแค่ย้อนกลับ

HTML :

<span class="generate-email" data-part1="john" data-part2="gmail" data-part3="com">placeholder</span>

JS :

$(function() {
    $('.generate-email').each(function() {
        var that = $(this);
        that.html(
            that.data('part1') + '@' + that.data('part2') + '.' + that.data('part3')
        );
    });  
});

ลองทำดู: http://jsfiddle.net/x6g9L817/


1

แล้ว HTML_CHARACTER ล่ะ:

joe&#064;mail.com

เอาท์พุท

joe@mail.com

1
ที่อยู่อีเมลนั้นไม่สามารถคลิกได้ด้วยวิธีนี้และตำแหน่งของสัญลักษณ์ @ จะไม่สามารถกันกระสุนได้ซึ่งจะไม่เหมือนกันเสมอไปหากเป็นแบบอินไลน์
Brent O'Connor

0

ต่อไปนี้เป็นวิธีแก้ไขปัญหา jQuery อย่างง่ายสำหรับปัญหานี้:

<script type="text/javascript">
$(document).ready(function() {
    str1="mailto:";
    str2="info";
    str3="@test.com";
    $("#email_a").attr("href", str1+str2+str3);

});
</script>

<a href="#" id="email_a"><img src="sample.png"/></a>

0

ฉันชอบคำตอบของ ofaurax ที่ดีที่สุด แต่ฉันจะแก้ไขมันเพื่อซ่อนอีเมลอีกเล็กน้อย:

onclick="p1='admin'; p2='domain.com'; this.href='mailto:' + p1 + '& #x40;' + p2"

0

ฉันแค่ต้องให้คำตอบอื่น ฉันเพิ่งมากับสิ่งที่สนุกกับการเล่น

ฉันพบว่าในตารางอักขระทั่วไปหลายตัวอักษร @ และ az ปรากฏขึ้นอีกครั้งมากกว่าหนึ่งครั้ง คุณสามารถแมปอักขระดั้งเดิมกับการแมปใหม่และทำให้บอทสแปมยากขึ้นในการค้นหาว่าอีเมลคืออะไร

หากคุณวนลูปผ่านสตริงและรับรหัสตัวอักษรของตัวอักษรจากนั้นเพิ่ม 65248 ลงไปและสร้างเอนทิตี html ตามจำนวนคุณจะได้รับอีเมลแอดเดรสที่มนุษย์อ่านได้

var str = 'john.doe@email.com';
str = str.toLowerCase().replace(/[\.@a-z]/gi, function(match, position, str){
    var num = str.charCodeAt(position);
    return ('&#' + (num + 65248) + ';');
});

นี่คือซอที่ทำงาน: http://jsfiddle.net/EhtSC/8/

คุณสามารถปรับปรุงวิธีการนี้ได้โดยสร้างชุดการแมปที่สมบูรณ์ขึ้นระหว่างตัวละครที่มีลักษณะเหมือนกัน แต่ถ้าคุณคัดลอก / วางอีเมลไปยังแผ่นจดบันทึกตัวอย่างเช่นคุณจะได้รับกล่องจำนวนมาก

เพื่อเอาชนะปัญหาประสบการณ์ผู้ใช้บางอย่างฉันสร้างอีเมลเป็นลิงก์ เมื่อคุณคลิกมันจะทำการแมปตัวละครกลับไปที่ต้นฉบับ

เพื่อปรับปรุงสิ่งนี้คุณสามารถสร้างการแมปอักขระที่ซับซ้อนมากขึ้นหากคุณต้องการ หากคุณสามารถค้นหาตัวละครหลายตัวที่สามารถใช้ตัวอย่างเช่นในสถานที่ของ 'a' ทำไมไม่ทำแผนที่แบบสุ่มเพื่อเหล่านั้น

อาจไม่ใช่วิธีที่ปลอดภัยที่สุดเท่าที่เคยมีมา แต่ฉันสนุกกับการเล่นกับมันมาก: D

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.