作者: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;
// mailto:address@example.com
// address@example.com
<p><a href="mailto:address@example.com">address@example.com</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="mailto:address@example.com">address@example.com</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