Шестнадцатеричный код указывает на строку в php

У меня есть греческий текст, и я хочу преобразовать его в шестнадцатеричный код без пробелов. Всего одна большая строка текста.

Это было именно то, что я искал -> Шестнадцатеричный код Unicode указывает на PHP, но он не предоставляет фактический код, как он это сделал.

2 ответа

Решение

Исходя из исходного кода и ответа на этот вопрос: как получить номер кодовой точки для заданного символа в строке utf-8? Я собрал эту функцию:

function utf8_to_unicode($str) {

    $unicode = array();        
    $values = array();
    $lookingFor = 1;

    for ($i = 0; $i < strlen($str); $i++) {

        $thisValue = ord($str[$i]);

        if ($thisValue < 128) 
            $unicode[] = str_pad(dechex($thisValue), 4, "0", STR_PAD_LEFT);
        else {
            if (count($values) == 0) $lookingFor = ($thisValue < 224) ? 2 : 3;                
            $values[] = $thisValue;                
            if (count($values) == $lookingFor) {
                $number = ($lookingFor == 3) ?
                (($values[0] % 16) * 4096) + (($values[1] % 64) * 64) + ($values[2] % 64):
                (($values[0] % 32) * 64) + ($values[1] % 64);
                $number = strtoupper(dechex($number));
                $unicode[] = str_pad($number, 4, "0", STR_PAD_LEFT);
                $values = array();
                $lookingFor = 1;
            } // if
        } // if
    } // for
    return ($unicode);   
} // utf8_to_unicode

Так:

$greekString = "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ ";
$hexArray = utf8_to_unicode($greekString);
echo implode("", $hexArray);

Будет выводить:

039103920393039403950396039703980399039A039B039C039D039E039F03A003A103A303A403A503A603A703A803A90032

Это работает для меня:

header('Content-Type: text/html; charset=utf-8'); 

bin2hex(iconv('UTF-8', 'UTF-16BE', 'your message')); 
Другие вопросы по тегам