微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Javascript到PHP domain.charCodeAt(i)

我正在尝试将javascript代码段转换为PHP.
Javascript

var sum1 = 0, sum2 = 0;
for (var i = domain.length - 1; i >= 0; i--) {
    sum1 += domain.charCodeAt(i) * 13748600747;
    sum2 += domain.charCodeAt(i) * 40216416130;
}

var x = ("$" + sum1).substring(0, 8) + ("" + sum2).substring(0, 8);

但是无法理解这一部分,sum1 = domain.charCodeAt(i)* 13748600747;我的意思是可以使用哪个PHP函数而不是domain.charCodeAt(i).

编辑:

我的PHP代码

$domain = "example.com";
$sum1 = 0;
$sum2 = 0;
$length = strlen($domain);
$i = $length - 1;
for ( $i; $i >= 0; $i-- ) {
    $sum1 += ord($domain[$i]) * 13748600747;
    $sum2 += ord($domain[$i]) * 40216416130;
}
$newsum = "$".$sum1;
$x = substr($newsum,0,8) + substr($sum2,0,8);

echo $x;

输出肯定是不同的.需要帮忙.

解决方法:

这应该是Unicode安全版本.

$domain = "example.com";
$sum1 = 0;
$sum2 = 0;

// this will convert $domain to a UTF-16 string,
// without specifying the third parameter, PHP will
// assume the string uses PHP's internal encoding,
// you might want to explicitly set the `from_encoding`
$domain = mb_convert_encoding($domain, 'UTF-16');

$length = mb_strlen($domain, 'UTF-16');
$i = $length - 1;

for ( $i; $i >= 0; $i-- ) {
    $char = mb_substr($domain, $i, 1, 'UTF-16');
    $sum1 += hexdec(bin2hex($char)) * 13748600747;
    $sum2 += hexdec(bin2hex($char)) * 40216416130;
}
$newsum = "$" . strval($sum1);
$sum2 = strval($sum2);
$x = substr($newsum,0,8) . substr($sum2,0,8);

echo $x;

转换为十进制是基于ord documentation上的this comment中的代码.

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

相关推荐