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

时间:2011-06-06 09:08:24

标签: php text ascii hex

我正在尝试在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]));
}

以及其他一些我再也找不到了......我真的很茫然,所以任何帮助都会非常感激!

谢谢! 马修

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

$str = 'My Cool String!';
$hex = '';

$str_ary = str_split($str);
foreach($str_ary as $char)
{
    $hex .= dechex(ord($char));
}

echo $hex;

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