我的任务是将perl制作的crypt函数转换为php代码.一切正常,除了这个:
Perl的:
$wert = Encode::encode( "utf8", $wert );
$len=length $wert;
$pad = ($len % 16)?"0".chr(16 - ($len % 16)):"10";
$fuell = pack( "H*", $pad x (16 - $len % 16));
Run Code Online (Sandbox Code Playgroud)
PHP:
$wert = utf8_encode($wert);
$len = mb_strlen($wert);
$pad = ( $len%16 ) ? '0'.chr(16 - ($len%16)) : '10';
$fuell = pack("H*", str_repeat($pad, (16 - $len % 16)));
Run Code Online (Sandbox Code Playgroud)
php版本适用于某些字符串.但是当我有'2010-01-01T00:00:00.000'这样的东西时,perl版本没有任何错误,php版本打印"PHP Warning:pack():Type H:非法十六进制数字".
如果有人能够发现php版本中的错误,我将非常感激.
编辑:
这是我要转换成php的完整功能.它是由一家公司的程序员制作的,它不再适用于我们,所以我无法真正说明原意是什么.
sub crypt
{
my $self = shift;
my ($wert,$pw)= @_;
$wert = Encode::encode( "utf8", $wert );
$pw …Run Code Online (Sandbox Code Playgroud)