JavaScript垃圾邮件过滤器

时间:2009-11-16 20:21:15

标签: javascript

我尝试通过JavaScript为我的电子邮件制作垃圾邮件过滤器。不幸的是,验证码不会传递代码。谁能说出http://jaakkospage.comyr.com/中代码中的错误是什么?

If you want to contact, please send me an
<script type="text/javascript">
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption key feature by Andrew Moulden, Site Engineering Ltd
// This code is freeware provided these four comment lines remain intact
// A wizard to generate this code is at http://www.jottings.com/obfuscator/
{ coded = "sppDD0.s.fBxxpYp@ULpJY.Q0L?fjHsBQi=LpJY 5m0L iVB cBHxpUB"
  key = "r3uREWBMXSnIezJANyZHi2Dq8btKkGv7PQFd4VTc51xh9wf0pCLYsoaUmljO6g"
  shift=coded.length
  link=""
  for (i=0; i<coded.length; i++) {
    if (key.indexOf(coded.charAt(i))==-1) {
      ltr = coded.charAt(i)
      link += (ltr)
    }
    else {     
      ltr = (key.indexOf(coded.charAt(i))-shift+key.length) % key.length
      link += (key.charAt(ltr))
    }
  }
document.write("<a href='mailto:"+link+"'>e-mail.</a>")
}
//-->
</script><noscript>Sorry, you need Javascript on to email me.</noscript>

部分validation errors

  

第42行,第27栏:字符“;”不   允许在属性规范中   列表

for (i=0; i<coded.length; i++) {
     

第42行,第27列:元素   “coded.length”undefined

for (i=0; i<coded.length; i++) {
     

您已使用名为的元素   在你的文件上面,但是   您正在使用的文档类型没有   定义该名称的元素。这个   错误通常由以下原因引起:

     

错误使用“严格”文档   键入包含使用框架的文档   (例如,您必须使用“框架集”   获取“”的文档类型   元素),通过使用供应商专有   扩展名,如“”或   “”(这通常是由   使用CSS实现所需   反而影响)。通过使用大写   XHTML中的标签(在XHTML属性和   元素必须都是小写的。)

3 个答案:

答案 0 :(得分:1)

我建议将javascript移动到单独的.js文件中。这应该允许HTML通过验证。这种分离是一种很好的做法。

答案 1 :(得分:1)

此处的基本问题是您的<script>标记包含<符号。 XHTML解析器将其视为新标记的开头,它认为它被称为coded.length

有一些可能的解决方案。一个是打开评论分隔符。您有结束分隔符-->,但不是开始分隔符。您只需在<!--之后添加包含<script>的行即可使其生效。当我在您的页面上尝试此操作时,虽然我收到有关<noscript>元素的验证错误。 <noscript>似乎在XHTML 1.1中存在一些严重问题,我不确定如何将其用于工作和验证。

当然,您似乎使用mime类型text/html为您的XHTML提供服务,这在技术上是不正确的,这意味着浏览器实际上将其解析为HTML,而不是XHTML。请参阅Sending XHTML as text/html Considered Harmful以获取有关为什么这是一个坏主意的一些信息(尽管该页面上的一些原因已经过时,因为它们指的是基本上没有人再使用的旧浏览器)。

另一种解决方案是从XHTML doctype切换到HTML5。这是一种新的,更易于使用的doctype,它更基于浏览器实际解析HTML的方式。您所要做的就是将<!DOCTYPE html SYSTEM ...>声明更改为<!DOCTYPE html>。而已!好吧,您还必须删除</meta>关闭代码,或将其转换为自闭元素<meta ... />。在这种情况下,您不需要围绕<script>元素内容的注释;解析器将忽略所有<个符号,直到下一个</script>

答案 2 :(得分:0)

您的代码未验证的原因是因为在<script></script>内,您必须使用HTML权限来表示HTML代码,例如< > &

解析器抱怨<coded.length element not defined因为验证程序在那里看到了HTML标记

最简单的选择是将脚本标签中的内容转移到HTML实体,更好的方法是将您的JS放在不同的文件中,链接到您的页面