我正在尝试在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]));
}
以及其他一些我再也找不到了......我真的很茫然,所以任何帮助都会非常感激!
谢谢! 马修
答案 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在评论中有正确的想法,它可能只是一个显示问题。