Преобразование текста в Hex в php является неточным - PullRequest
2 голосов
/ 06 июня 2011

Я пытаюсь преобразовать текстовую строку в шестнадцатеричный в 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 ]

3 голосов
/ 06 июня 2011

Похоже, что входная строка содержит символы в кодировке utf-8 (я говорю это на основе выходных данных).Попробуйте преобразовать эти символы обратно в формат ASCII / ISO-8859-1.

$indat = utf8_decode("...");
$hexdata = bin2hex($indat);
1 голос
/ 06 июня 2011

Я обычно просто обрабатываю по одному символу за раз.

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

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

echo $hex;

Edit: Глядя на это снова, похоже, что наш код очень похож (не заметил код: \). Я считаю, что Джефф Паркер имеет правильную идею в комментарии, это может быть просто проблема с отображением.

...