php 16位 md5加密乱码的解决方法

    PHP默认的md5加密是32位的, 虽然php从5.0开始说是可以16位加密的, 但是16位加密会出现乱码问题.
md5($str, true)后跟true参数时为16位,但很多时候会出现乱码(因为生成的二进制有不可显示字符!)
其实32位的加密字符串的第8到24位,和16位MD5的字符串是一样的。
 我们可以先32位加密,再用substr()来截取;
    function md5_16($str){
         return substr(md5($str),8,16);
    }
    $str = "http://tools.jiliuke.com";
    echo md5($str);
    echo md5_16($str);
输出结果:
    0b8e0d6246125a11a1223bd9c6977770
    46125a11a1223bd9
php 16位加密也可以这样来写:
    substr(md5("admin"),8,-8);