У меня есть строка, состоящая из нескольких латинских слов, специальных символов и японских символов.Строка в кодировке UTF-8.Я хотел бы преобразовать все в гекс.
Я пробовал несколько подходов, но каким-то образом японские символы не были преобразованы правильно.Все остальное преобразуется правильно.
В качестве примера я хочу преобразовать японские символы для «теста», которые выглядят так: テ ス ト
Когда я пытаюсь использовать эту функцию:
function utf8StringToHexString($string) {
$nums = array();
$convmap = array(0x0, 0xffff, 0, 0xffff);
$strlen = mb_strlen($string, "UTF-8");
for ($i = 0; $i < $strlen; $i++) {
$ch = mb_substr($string, $i, 1, "UTF-8");
$decimal = substr(mb_encode_numericentity($ch, $convmap, "UTF-8"), -5, 4);
$nums[] = "" .base_convert($decimal, 10, 16). ";";
}
return implode("", $nums);
}
Я получаю «9b6; 9a9; 9b8».
Когда я пытаюсь:
function strToHex($string)
{
$hex='';
for ($i=0; $i < strlen($string); $i++)
{
$hex .= dechex(ord($string[$i]));
}
return $hex;
}
, я получаю «e38386e382b9e38388», который на найденной мной странице перехода был помечен как «шестнадцатеричный»utf-8 ".
То, что я хотел бы иметь, это" 30 C6 30 B9 30 C8 ", который на той же странице конверсии помечен как" шестнадцатеричное сырье ".Когда я запускаю функцию utf8StringToHexString для латинского текста, я получаю вывод «шестнадцатеричное необработанное».
когда я запускаю mb_detect_encoding (), он выводит «UTF-8» как для латинских, так и для японских символов.
спасибо за помощь!