手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2009年06月的文章

做了一件蠢事

由于手机的闹钟早上会响好几次,所以火气一大,想把系统格掉。
结果忘了把短信备份。里面N多朋友的短消息全没有了。(光想着手机号码备份了。唉)

其他短信不见了都没有关系,但是一些重要的没有了就补不回来了,例如:
1、某些朋友的结婚邀请(不然就忘了别人是啥时候结婚的了)
2、生孩子的时候发的短信(不知道别人是几号生的了)
3、部分网站或者XXX的密码

以上都是非常重要的东西。本来以为有备份的,结果打开电脑一看,备份也没有了。
唉。怎么办。。。伤心啊

我真TMD蠢啊。发现自己的记忆越来越差了。身体也越来越差了,白头发越来越多了。

估计时候不多了。亚健康这东西,说不准啊。。。
感慨一下

为 Linux 和 Windows 安装 PHP 和 Oracle 10g Instant Client

这是一篇 很老的文章了,那时候,PDO应该还没有出来吧。不过,仍然可以作为参考。。这里是纯记录,做个笔记

备注:如果看完下文,你觉得还不够,那么,看看这个吧:http://wiki.oracle.com/page/PHP+Oracle+FAQ?t=anon


原文:http://www.oracle.com/technology/global/cn/pub/notes/technote_php_instant.html

Oracle 10g Instant Client(免费下载)是PHP 与远程 Oracle 数据库连接的最简单方式,它只需要安装三个库。

PHP 访问 Oracle 的当前 API 所使用的 Instant Client 库称作 OCI8.(此 C 接口的名称最早是在 Oracle8 中引入的。)PHP Oracle 8 函数 可以直接调用 Oracle 8.1.7、9.x 或 10.x,或者也可以为了方便起见,使用可选的抽象类,如 PEAR MDB2ADOdb

Instant Client 也可以使用老版本的 PHP“oracle”扩展,但它调用不赞成使用的 Oracle API。PHP 界或 Oracle 建议不要使用此扩展进行新的开发。

要在 Apache 上将 Instant Client 与 PHP 4 或 连用,请遵循以下步骤。需要一个现有的 Oracle 数据库;Instant Client 不提供 Oracle 数据库。通常情况下,此数据库将位于其他计算机上。如果数据库位于本地,则 Oracle 组件一般早已可用,从而不需要 Instant Client。

软件需求:

软件 附注
Oracle Instant Client 下载“Instant Client Package - Basic”。在 Linux 上,还应下载“Instant Client Package - SDK”。
Apache HTTPD Server PHP 界仍推荐 Apache 1.3
PHP — PHP 超文本处理器 4.3 版或更高版本

在 Windows 上启用 PHP OCI8 扩展

Instant Client 二进制文件是 PHP 的 Windows 预构建二进制文件的补充。

  1. 下载 PHP 二进制压缩文件(不是安装程序版本)和 Apache。按照 PHP 手册中的 Windows 系统上的安装安装它们。OTN 的开放源代码开发人员中心包含有用背景资料的链接,如“在 Windows 2000/XP 上安装 Oracle、PHP 和 Apache”,它介绍了如何安装传统、完整的 Oracle 10g 版本(Instant Client 不需要此版本)。

    继续操作之前检查 PHP 是否正常运行。此阶段未启用 Oracle 支持。

  2. 从 OTN 的 Instant Client 页面下载用于 Windows 的 Instant Client Basic 程序包。此压缩文件的大小大约为 30MB。

  3. 创建一个子目录(例如,c:\instantclient10_1),然后从压缩文件中复制以下库:

    • oraociei10.dll
    • orannzsbb10.dll
    • oci.dll

    这三个文件的总大小大约为 80MB。

    要使用 PHP 老版本的“oracle”扩展(在 php.ini 中使用“extension=php_oracle.dll”启用),则复制 ociw32.dll 而非 oci.dll。

  4. 编辑此环境,将 c:\instantclient10_1 添加到 PATH 中(位于其他 Oracle 目录之前)。

    例如,在 Windows 2000 上,依次单击“开始”->“设置”->“控制面板”->“系统”->“高级”->“环境变量”,编辑系统变量列表中的 PATH。

    如果使用了 tnsnames.ora 文件定义 Oracle Net 服务名称,则将 tnsnames.ora 复制到 c:\instantclient10_1,并将用户环境变量 TNS_ADMIN 设置为 c:\instantclient10_1。也可以在用户环境变量 LOCAL 中定义默认的服务名称。

    设置必要的 Oracle 全球化语言环境变量,如 NLS_LANG。如果没有设置,则使用默认的本地环境。有关更多详细信息,请参见 Oracle PHP 应用程序全球化概述

    无需设置不必要的 Oracle 变量,如 ORACLE_HOME 和 ORACLE_SID。

  5. 编辑 php.ini,并不要将 OCI8 扩展设为注释:

    extension=php_oci8.dll

    将 extension_dir 指令设置为完整的 PHP 扩展 DLL 路径。在 PHP 4 中,DLL 位于 PHP 软件的“extensions”子目录中。在 PHP 5 中,它们位于“ext”中。

  6. 重新启动 Apache。

要检查是否配置了扩展,请在 web 服务器可以读取的地方创建一个简单的 PHP 脚本。

<?php 
phpinfo();
?>

使用“http://”URL 将此脚本加载到浏览器中。浏览器页面应包含一个显示“OCI8 Support enabled”的“oci8”部分。

在 Linux 上启用 PHP OCI8 扩展

要在 Linux 上添加 Oracle 连接,需要重新编译 PHP。

开放源代码开发人员中心包含有用背景资料的链接,如在 Linux 上安装 Oracle、PHP 和 Apache,它介绍了如何安装传统、完整的 Oracle 10g 版本(Instant Client 不需要此版本)。

  1. 下载并安装 Apache。例如,在您的主目录中安装它:
    cd apache_1.3.31
    ./configure --enable-module=so --prefix=$HOME/apache --with-port=8888
    make
    make install

    编辑 $HOME/apache/conf/httpd.conf 并添加:

    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
  2. 下载并解压缩 PHP。

  3. 从 OTN 上的 Instant Client 页面下载 Basic 和 SDK Instant Client 程序包。这两个 RPM 的总大小大约为 30MB。

  4. 以 root 用户的身份安装 RPM。

    rpm -Uvh oracle-instantclient-basic-10.1.0.3-1.i386.rpm
    rpm -Uvh oracle-instantclient-devel-10.1.0.3-1.i386.rpm

    第一个 RPM 将 Oracle 库置于 /usr/lib/oracle/10.1.0.3/client/lib 中,第二个 RPM 在 /usr/include/oracle/10.1.0.3/client 中创建头 (header)。

  5. 备份此补丁,然后将它应用于 PHP 的 ext/oci8/config.m4。该补丁的行号是基于 PHP 4.3.9 的。如果已修复了 PHP 错误 31084(很有可能已在 PHP 4.3.11 和 5.0.4 中修复),则不需要此补丁。

    如果使用的是 PHP 4.3.9 或 4.3.10,则可以将此补丁保存到一个文件中(如 php_oci8ic_buildpatch),然后使用以下命令安装它:

    patch -u config.m4 php_oci8ic_buildpatch

    此补丁创建一个新的 PHP 配置参数:--with-oci8-instant-client[=DIR].在 Linux 上,默认情况下,它使用从 RPM 中安装的最新版本的 Instant Client。可以指定 Oracle 库所在的目录来使用其他版本。无论在哪种情况下,都将自动使用正确的 SDK 头。

    新参数与现有的 --with-oci8 参数互斥。

    例如:在非 Linux 平台上,将 Instant Client 程序包解压缩到您所选择的目录中。--with-oci8-instant-client 参数将需要明确指定此目录;例如,--with-oci8-instant-client=/home/instantclient10_1。应将 Instant Client SDK 解压缩到与基本程序包相同的目录中,以便修改后的配置脚本可以找到头文件的子目录。

  6. 在顶层 PHP 目录中重新构建“configure”脚本。
    cd php-4.3.9
    rm -rf autom4te.cache config.cache
    ./buildconf --force
  7. 使用新选项运行 configure。此示例使用安装在主目录中的 Apache。

    ./configure \
    --with-oci8-instant-client \
    --prefix=$HOME/php --with-apxs=$HOME/apache/bin/apxs \
    --enable-sigchild --with-config-file-path=$HOME/apache/conf
  8. 重建 PHP。

    make
    make install
  9. 将 PHP 配置复制到 --with-config-file-path 指定的位置

    cp php.ini-recommended $HOME/apache/conf/php.ini
  10. 将 LD_LIBRARY_PATH 设置为 /usr/lib/oracle/10.1.0.3/client/lib 并重新启动 Apache。

    如果使用了 tnsnames.ora 文件定义 Oracle Net 服务名称,则将 TNS_ADMIN 设置为包含此文件的目录。

    启动 Apache 之前应设置所有 Oracle 环境变量。以下脚本可以帮助完成此操作:

    #!/bin/sh

    APACHEHOME=/home/apache

    LD_LIBRARY_PATH=/usr/lib/oracle/10.1.0.3/client/lib:${LD_LIBRARY_PATH}
    TNS_ADMIN=/home
    export LD_LIBRARY_PATH TNS_ADMIN

    echo Starting Apache
    $APACHEHOME/apachectl start

要确认是否配置了扩展,请在 web 服务器可以读取的地方创建一个简单的 PHP 脚本。

<?php 
phpinfo();
?>

使用类似“http://localhost:8888/<path>/phpinfo.php”的 URL 将此脚本加载到浏览器中。浏览器页面应包含一个显示“OCI8 Support enabled”的“oci8”部分。

连接到 Oracle

Oracle 连接信息被传递给 OCILogon() 来创建连接。与 Instant Client 关联的工具通常“远离”任何数据库服务器,因此必须将 Oracle Net 连接标识符与用户名和口令一起使用。对于已建立的 Oracle 数据库,连接信息有可能是众所周知的。对于新系统,此信息由 Oracle 安装程序在安装数据库时提供。此安装程序应配置了 Oracle Net 和创建了一个服务名称。

在新数据库中,可能需要将演示模式(如 HR 用户)解除锁定并向其提供口令。也可通过在 SQL*Plus 中以 SYSTEM 用户身份连接并执行以下语句来完成此操作:

ALTER USER 用户名 IDENTIFIED BY 新口令 ACCOUNT UNLOCK;

将连接信息传递给 PHP 有多种方法。第一个示例使用 Oracle 10g的 Easy Connect 语法连接到 在 mymachine 上运行的 MYDB 数据库服务中的 HR 模式。不需要 tnsnames.ora 或其他 Oracle Network 文件:

$c = OCILogon('hr', 'hr_password', '//mymachine.mydomain/MYDB');

有关 Easy Connect 的语法,请参见 Oracle 的使用 Easy Connect 命名方法文档。

或者,如果 /home/tnsnames.ora 包含:

MYDB =
(DESCRIPTION=
(ADDRESS = (PROTOCOL = TCP)(HOST = mymachine.mydomain)(PORT = 1521))
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME = MYDB)
)
)

且 TNS_ADMIN 环境变量设置为 /home(在启动 Apache 之前),则连接字符串可以为:

$c = OCILogon('hr', 'hr_password', 'MYDB');

如果环境变量 LOCAL(在 Windows 上)或 TWO_TASK (在 Linux 上)设置为 MYDB,则可以使用以下代码生成与 MYDB 连接:

$c = OCILogon('hr', 'hr_password');
使用 Oracle

当基本连接可以使用时,试着运行一个简单的脚本 testoci.php。根据您的数据库修改该连接的详细信息并在浏览器中加载它。此示例列出了用户 HR 拥有的所有表:

<?php 

$conn = OCILogon("hr", "hr_password", '//mymachine.mydomain:port/MYDB);

$query = 'select table_name from user_tables';

$stid = OCIParse($conn, $query);
OCIExecute($stid, OCI_DEFAULT);
while ($succ = OCIFetchInto($stid, $row)) {
foreach ($row as $item) {
echo $item." ";
}
echo "<br>\n";
}

OCILogoff($conn);

?>
故障诊断

Oracle PHP 故障诊断常见问题解答包含有关连接 Oracle 的有用信息。

可以从 Instant Client 页面下载 Oracle 的 SQL*Plus 命令行工具来帮助解决环境问题和连接问题。另请参见 SQL*Plus Instant Client 版本说明

检查 SQL*Plus 使用的环境是否与 phpinfo.php 显示的环境相同。

Windows 帮助

如果 phpinfo.php 脚本没有生成显示“OCI8 Support enabled”的“oci8”部分,则确认在 php.ini 中没有将“extension=php_oci8.dll”设为注释。

如果 PATH 设置错误,或找不到 Oracle 库,则启动 Apache 将显示警告:“在指定的路径中找不到动态链接库 OCI.dll。”phpinfo() 页面的 Environment 部分将显示 PATH 的值以及 PHP 实际使用的 Oracle 变量。

如果 php.ini 的 extension_dir 指令不正确,则在启动 Apache 将显示警告:“PHP 启动:无法加载动态库 php_oci8.dll。”

Linux 帮助

仔细检查是否正确修复了 config.m4。如果“configure”失败,则检查 config.log 文件。还原 config.m4,删除缓存文件,运行 ./buildconf --force and configure,验证问题是否与所做的更改相关。

确保“configure”上的时间戳是当前的。删除所有缓存文件,并在必要时重建它。

在启动 Apache 的 shell 中设置所有必要的 Oracle 环境变量。

结论

希望本文对您能有所帮助。您可以在 OTN Instant ClientPHP 论坛上发表问题和建议。

Tags: oracle

Memcahed分布式缓存服务替换Session解决方案

个人觉得以下内容不是特别成熟,不过可以用来做个参考。关于memcached做此类事情,张宴那里好象有不少资料,权当是参考吧?

全文如下:
http://www.cnblogs.com/xuanfeng/archive/2009/06/04/1494735.html
需求:

       有个ASP.NET网站系统,有一级域名,二级域名,三级域名,系统的各个功能模块分布在不同的域名,同一域名的也有可能分布在不同省份的服务器或者同一同一省份的不同的服务器中,同一省份的的服务器可以通过内部局域网访问。在系统中,现在需要所有功能模块共享用户会话信私有数据。

常用的方式是启用Session的数据库持久会模式可以达到上面的需求(没尝试过),现在需要使用Memcached分布式缓存服务来达到保存用户的会话数据,而达到各个功能模块都能够跨省份、跨服务器共享本次会话中的私有数据的目的。

解决方案:       

     每个省份使用一台服务器来做为Memcached服务器来存储用话的会话中的数据,当然也可以多台服务器,但必须确保每个省份的做Memcached服务器数量必须一致,这样才能够保证Memcached客户端操作的是同一份数据,保证数据的一致性。

会话数据的添加、删除、修改:

Memcached客 户端,添加、删除和、修改会话信息数据时,不仅要添加、删除、修改本省的Memcached服务器数据,而且同时要对其它省份的Memcahed服务器做 同样的操作,这样用户访问其它省份的服务器的功能模块进也能读取到相同的会话数据。Memcached客户端服务器的列表使用局域网的内网 IP(如:192.168.1.179)操作本省的Memcahed服务器,使用公网的IP((如:202.183.62.210))操作其它省份的 Memcahe服务器。

会话数据的读取

系统所有模块读取会话数据的Memcached客户端服务器列表都设为本省Memcached服务器地址的内网IP来向Memcahed服务器中读取会话数据。

 

大小: 202.91 K
尺寸: 319 x 376
浏览: 1618 次
点击打开新窗口浏览全图   

  如 上图所示,A省有四台服务器,B省也有四台服务器,两个三份都有三台Web服务器、一台Memcached服务器,且A省四台服务器同在一个局域网内的可 能通过内网IP相互访问,B省也一样。假如:A省的A1,B1,C1这三台Web服务器其中的一台要添加或修改、或删除会话数据,它首先调服 Memcached客户端使服D1服务器的内网IP向D1服务器中添加或修改、或删除会话数据,操作完成后,还用调用Memcache客户端使服D2服务 器的公网IP向D2服务器做同样的操作,这样才算完整的操作过程,也可以当做一个事务来处理。假如:A省的A1,B1,C1这三台Web服务器其中一台服 务器想要读取会话的数据,只需要调用Memcached客户端使服D1服务器的内网IP读取数据即可,如果发现该数据不存在,即做向Memcached服 务器添加数据的相关业务处理。B省处理逻辑同A省。 

 同一会话的确认:

        使用Cookie来保持客户与服务端的联系。 每一次会话开始就生成一个GUID作为SessionID,保存在客户端的Cookie中,作用域是顶级域名,这样二级、三级域名就可以共享到这个Cookie,系统中就使用这个SessionID来确认它是否是同一个会话。

        

会话数据的唯一ID

    会话数据存储在Memcached服务器上的唯一键Key也就是会话数据数据的唯一ID定义为:SessionID_Name, SessionID就是保存在客户端Cookie中的SessionID, Name就是会话数据的名称,同一次会话中各个会话数据的Name必须是唯一的,否则新的会话数据将覆盖旧的会话数据。

会话的失效时间:

       会话的失效通过控制Cookie的有效时间来实现,会话的时间设为SessionIDCookie中的有效时间,且每一次访问SessionID时都要重新设置一下Cookie的有效时间,这样就达到的会话的有效时间就是两次间访问CookieSessionID值的的最长时间,如果两次访问的间隔时间超过用效时间,那么保存在SessionIDCookie将会失效,并生成新的SessionID存放在Cookie, SessionID改变啦,会话就结束啦。

Memcached服务器中会话数据的失效

      每 一次向Memcache服务器中添加会话数据时,都把有效时间设为一天也就是24小时,让Memcached服务使用它内部的机制去清除,不必在程序中特 别做会话数据的删除操作。数据在Memcache服务器中有有效时间只是逻辑上的,就算是过了24 小时,如果分配给Memcached服务的内存还够用的话,数据还是保存在内存当中的,只是Memcache客户端读取不到而已。只有到了分配给 Memcached服务的内存不够用时,它才会清理没用或者比较旧的数据,也就是懒性清除。

 


关于张宴博客上一些memcached的资料,建议查看:http://blog.s135.com/category/13/
虽然对于存储session之类的没有介绍,但他介绍的分布式存储,如果运用起来就是实现上面的效果哦。。


Tags: memcached

google reader使用帮助

本来不想写这篇文章的,但想想还是需要写一下,因为我的RSS文章输出是全文,而很少用摘要。问题就出在这里:http://www.cnblogs.com/yuylyp/archive/2009/06/03/1495168.html,这位朋友对RSS全文输出非常不满,因为他是用google reader的。

事实上,我也是使用google reader,但我没有觉得全文输出不好啊。因为我免除了打开对方网站的速度问题,东西都由google做了一遍缓存,通过google打开,速度要快上很多了。

再者,一些墙外的博客,我怎么看?用Reader订阅一下,由google帮我下载下来,如果他们不是用全文,那我怎么办??

所以,贴上一些greader的快捷键,方便各位观看

调出快捷键帮助也很简单,在阅读区,输入?就可以了。(是英文的?,不是中文的?)

或者打开网址:http://www.google.com/support/reader/bin/answer.py?hl=en&answer=69973,也可以查看

我这里再附上图片:

图片附件(缩略图):
大小: 166.13 K
尺寸: 500 x 365
浏览: 1814 次
点击打开新窗口浏览全图

Tags: google reader

如何混淆电子邮件来防止垃圾发送者

这是一篇来自cssrain站长的译文。很多时候,我们都不敢在自己的勃客、网站上留下自己的mail,因为 这会带来大量的垃圾邮件。
但如果不留mail,又会让很多用户、过客无法与自己联络,这真是一个两难的问题。在几年前就有那种把email改成用document.write输出的情况。但这种并不实用。

看完这篇文章,或者你应该有相对较好的方法来处理你的邮件,不过我个人推荐的是这种;

XML/HTML代码
  1. <!--这是一个简单的例子,可能并不能运行,我是直接手工输入的,没有debug,只是介绍原理-->  
  2. <a href="#" onclick="sendmail()" id='sendmail'>gou<span class="bgcolor">0982134</span>ki@<span class="bgcolor">0912ujf</span>neatdns.com</a>  
  3. <script>  
  4. function sendmail(){  
  5.     $('#sendmail span').remove();  
  6.     //然后反$('#sendmail').text() 拷贝到剪贴板,给用户提示一下  
  7. }  
  8. </script>  

改写了一下,终于可以走通了,不会用clone,只能用这种替代方案了。。代码较差:

XML/HTML代码
  1. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>  
  2. <style>  
  3. #sendmail span{display:none}  
  4. #hiddenmail {display:none}  
  5. </style>  
  6. <a href="#" id='sendmail'>gou<span>0982134</span>ki@<span>0912ujf</span>neat<span>091r</span>dns.com</a><span id="hiddenmail"</span>  
  7. <script>  
  8. $(document).ready(function(){  
  9.     $('#hiddenmail').html( $("#sendmail").html());  
  10.     $("#hiddenmail span").remove();  
  11.     $('#sendmail').attr("href" ,"mailto:"+$("#hiddenmail").text());  
  12. });  
  13. </script>  
这种情况,邮件地址可以正常显示,但如果从网页上选择邮件地址再复制的话,就会把span所包含的内容也复制进去了。个人觉得这样处理比较好,对于span里的内容,可以通过程序生成插进去。位置也可以不一样,这样别人就无法直接复制网址了。而且点击后也能够发送邮件。但问题同样明显,如果禁用了javascript,那就会出现一堆无效字符

 

以下是66[cssrain站长]翻译的文章内容:

一直以来我都认为” mailto: “是一个神圣的链接。通过它,我可以在网页中发布我的email地址,并且任何人都可以通过单击这个链接联系我。当然前提是在一个纯洁的Web环境下 ---在垃圾邮件发送者出来之前。举个例子说:今天你在你的网页中使用了” mailto: “,那么30秒后你将收到第一封伟哥信息。垃圾邮件发送者的速度之快另你惊讶。从今以后,你将收到越来越多的垃圾邮件。那么我们有什么办法,在自己的网页 中发布自己邮箱的同时,不引起垃圾邮件发布者的注意呢?

最明显的解决办法是在你的HTML中使用机器不可读的Email。比如:“bob (at) bobsdomain dot com”。虽然这可以使垃圾邮件发送者不再那么容易,但它同时也会为难您的用户。

另一种选择是使用JavaScript生成的电子邮件地址 ,然后对字符串加点编码。如:

<p>contact :
<script type="text/javascript">
document.write('<a href="mai'+"lto"+"bob"+'@'+'bobsdomain.com">bob@'+"bobsdomain.com</a>");
</script>
</p>

 

这将阻止大多数垃圾邮件发送者,但如果用户禁用JavaScript将不会看到您的地址。
(我不推荐使用 document.write() )

一个更好的解决办法是使用它们两者相结合的技术,以阻止垃圾邮件,同时不会造成用户的困难。

首先在我的网页中使用一个人性化的,同时垃圾邮件发送者不能收集的email地址。我们还将它链

接到一个联络网页,例如:

< p>Contact <a href="contact.html" class="email">bob (at) bobsdomain dot com</a></p> 

请注意,我们为链接添加了一个class,并设置为”email”

接下来写一个JavaScript函数搜寻网页的伪装的电子邮件,并将它转换成真正的mailto:链接。

我们将创建一个' email.js '文件,将它包括在我们的HTML
< script type="text/javascript" src="email.js"></script>

 

所需要的代码很短,代码如下:
function EmailUnobsfuscate() {
 //查找所有的a
 var link = document.getElementsByTagName && document.getElementsByTagName("a");
 var email, e;
 for (e = 0; link && e < link.length; e++) {
  // 判断当前link的class是否含有"email"
  if ((" "+link[e].className+" ").indexOf(" email ") >= 0) {
   // 获取全小写的email地址
   email = link[e].firstChild.nodeValue.toLowerCase() || "";
   // 转换email地址
   //将dot转为.
   email = email.replace(/dot/ig, ".");
   //将(at)转为@
   email = email.replace(/\(at\)/ig, "@");
   //将空格转为"" 
   email = email.replace(/\s/g, "");
   //判断是否为有效email
   if (/^[^@]+@[a-z0-9]+([_\.\-]{0,1}[a-z0-9]+)*([\.]{1}[a-z0-9]+)+$/.test(email)) {
    // 把真正的email插入到页面中
    link[e].href = "mailto:" + email;
    link[e].firstChild.nodeValue = email;
   }
  }
 }
}

 最后,我们需要确保在网页加载完毕后运行email.js

window.onload = EmailUnobsfuscate;

使用两者结合的结果是:

1、我们的原始HTML网页中没有mailto:链接,同时也不会轻易收到垃圾邮件发送者发来的垃圾邮件。

2、绝大多数的用户(那些启用JavaScript )将看到一个标准的电子邮件地址和mailto:链接。

3、少部分禁用脚本的用户可以看到bob (at) bobsdomain dot com的地址。

说了这么多,意图就是展示这些概念,而不是这些代码。尽管例子能正常工作,但我还是建议你:

1、使用您自己的伪装电子邮件格式,例如:bob {@} bobsdomain – dot - com

     因为垃圾邮件发送者可以阅读这篇文章后变换编码的电子邮件,然后轻易的对付你!

2、使用不同的链接标识符--- “email”有点明显!

3、使用JavaScript库,例如jQuery ,使代码更为简短。您还应该确保它应付空格或其他DOM
点周围的电子邮件地址文字(不处理的代码段)。

4、使用一个更强大的事件处理程序来取代window.onload

 

 

祝您好运。


例子演示: http://www.cssrain.cn/demo/howtoemail.html

原文地址: http://www.sitepoint.com/blogs/2009/05/05/stop-spam-harvesting-email-obfuscation/

Tags: 混淆

Records:53«234567891011