16进制地址编码_十六进制编码转换中文

16进制地址编码_十六进制编码转换中文作者:zhanhailiang日期:2013-04-26目的避免显示的邮箱地址被address-harvestingspambots(邮箱地址收集爬虫)收集

16进制地址编码_十六进制编码转换中文"

  作者:zhanhailiang 日期:2013-04-26

目的

避免显示的邮箱地址被address-harvesting spambots(邮箱地址收集爬虫)收集。当然,以下这种方式只能避免一部分的爬虫收集,仍然还有些高级爬虫可以收集到。

实现

<?php
 
function hexentities($str) { 
    
    $return = '';
    for($i = 0; $i < strlen($str); $i++) { 
    
        $return .= '&#x'.bin2hex(substr($str, $i, 1)).';';
    }
    return $return;
}
 
echo hexentities("mailto:address@example.com").PHP_EOL;
echo hexentities("address@example.com").PHP_EOL;
 
 
// &#x6d;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#x61;&#x64;&#x64;&#x72;&#x65;&#x73;&#x73;&#x40;&#x65;&#x78;&#x61;&#x6d;&#x70;&#x6c;&#x65;&#x2e;&#x63;&#x6f;&#x6d;
 
// &#x61;&#x64;&#x64;&#x72;&#x65;&#x73;&#x73;&#x40;&#x65;&#x78;&#x61;&#x6d;&#x70;&#x6c;&#x65;&#x2e;&#x63;&#x6f;&#x6d;
<p><a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#x61;&#x64;&#x64;&#x72;&#x65;&#x73;&#x73;&#x40;&#x65;&#x78;&#x61;&#x6d;&#x70;&#x6c;&#x65;&#x2e;&#x63;&#x6f;&#x6d;">&#x61;&#x64;&#x64;&#x72;&#x65;&#x73;&#x73;&#x40;&#x65;&#x78;&#x61;&#x6d;&#x70;&#x6c;&#x65;&#x2e;&#x63;&#x6f;&#x6d;</a></p>

实际解析显示为:

<p><a href="mailto:address@example.com">address@example.com</a></p>

更进一步,可以参考Markdown AUTOMATIC LINKS对邮箱的自动链接处理:

Automatic links for email addresses work similarly, except that Markdown will also perform a bit of randomized decimal and hex entity-encoding to help obscure your address from address-harvesting spambots.

简单说,Markdown对邮箱进入十六进制编码时引用了随机性,增强防恶意收集的能力。

如下为其编码结果:

<p><a href="m&#97;&#105;&#108;t&#111;:&#97;&#x64;&#x64;&#x72;&#101;&#115;&#115;&#64;&#x65;&#x78;&#97;&#109;p&#x6C;&#x65;&#46;&#x63;&#x6F;m">&#97;&#x64;&#x64;&#x72;&#101;&#115;&#115;&#64;&#x65;&#x78;&#97;&#109;p&#x6C;&#x65;&#46;&#x63;&#x6F;m</a></p>

可以看出,蓝色标记的字符并没有进行十六进制编码。

对Markdown对邮箱地址的自动链接算法有兴趣的同学请参考Markdown包里的源码Markdown.pl:

1167 sub _DoAutoLinks {
   
   
1168     my $text = shift;
1169 
1170     $text =~ s{
   
   <((https?|ftp):[^'">\s]+)>}{<a href="$1">$1</a>}gi;
1171 
1172     # Email addresses: <address@domain.foo>
1173     $text =~ s{
1174         <
1175         (?:mailto:)?
1176         (
1177             [-.\w]+
1178             \@
1179             [-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+
1180         )
1181         >
1182     }{
1183         _EncodeEmailAddress( _UnescapeSpecialChars($1) );
1184     }egix;
1185 
1186     return $text;
1187 }

参考:

  • http://www.php.net/manual/en/function.bin2hex.php#48861
  • http://daringfireball.net/projects/markdown/syntax

今天的文章16进制地址编码_十六进制编码转换中文分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86179.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注