php中文本到十六进制的转换不准确



我试图在php中将文本字符串转换为十六进制(这听起来很琐碎),但我尝试的所有转换都输出了不正确的数据。

我需要转换的字符串是
RTP1 •. • A ¥;¥9ÈKJ| %¯ : E~WF 3HxI#Y¥

正确的结果是;525450310120209501022e2095204120030503040ba53b03040ba539c84b041f4a7c1120202025af032020203a20457e0357462033487849230459a52020202020

但我总是得到;52545031012020e280a201022e20e280a2204120030503040bc2a53b03040bc2a539c3884b041f4a7c1120202025c2af032020203a20457e0357462033487849230459c2a52020202020

在线计算器http://www.swingnote.com/tools/texttohex.php在这方面做得很好——我已经给作者发了电子邮件,要求提供php源代码,但没有得到回复。

我尝试过以下功能,但没有成功;

bin2hex($data);
function strToHex($string)
{
    $hex='';
    for ($i=0; $i < strlen($string); $i++)
    {
        $hex .= dechex(ord($string[$i]));
    }
    return $hex;
}
for ($i = 0; $i < strlen($string); $i++) {
    echo dechex(ord($string[$i]));
}

还有一些我再也找不到的。。。我真的很不知所措,所以任何帮助都将不胜感激!

谢谢!Matthew

输入字符串似乎包含utf-8编码字符(我根据输出这么说)。尝试将这些字符转换回类似ASCII/ISO-8859-1的格式。

$indat = utf8_decode("...");
$hexdata = bin2hex($indat);

我通常一次只处理一个字符。

$str = 'My Cool String!';
$hex = '';
$str_ary = str_split($str);
foreach($str_ary as $char)
{
    $hex .= dechex(ord($char));
}
echo $hex;

编辑:再看一遍,我们的代码看起来非常相似(没有注意到代码:\)。我相信杰夫·帕克在评论中的想法是正确的,这可能只是一个展示问题。

最新更新