Есть ли простой способ преобразования строки в UTF-8 в ее юникод? В основном я пытаюсь преобразовать 'è' в '00E8'.PHP - Преобразование из UTF-8 в Unicode hex
0
A
ответ
1
Вы можете использовать json_encode
, чтобы сделать это ...
$str = "è";
$str = json_encode($str);
print $str;
отпечатывается \ u00e8. Вы можете str_replace
, чтобы удалить \ u, если хотите. Вы можете использовать strtoupper
, если хотите E вместо e.
0
Вот кое-что я изменил от отладки класса шахты
/**
* Display utf && non-printable characters as hex
*
* @param string $str string containing binary
* @param boolean $htmlout add html markup?
*
* @return string
*/
public function strInspect($str)
{
$this->htmlout = $htmlout;
$regex = <<<EOD
/
([\x01-\x7F]) # single-byte sequences 0xxxxxxx (ascii 0 - 127)
| (
(?: [\xC0-\xDF][\x80-\xBF] # double-byte sequences 110xxxxx 10xxxxxx
| [\xE0-\xEF][\x80-\xBF]{2} # triple-byte sequences 1110xxxx 10xxxxxx * 2
| [\xF0-\xF7][\x80-\xBF]{3} # quadruple-byte sequence 11110xxx 10xxxxxx * 3
){1,100} # ...one or more times
)
| ([\x80-\xBF]) # invalid byte in range 10000000 - 10111111 128 - 191
| ([\xC0-\xFF]) # invalid byte in range 11000000 - 11111111 192 - 255
| (.) # null (including x00 in the regex = fail)
/x
EOD;
$str_orig = $str;
$strlen = strlen($str);
$str = preg_replace_callback($regex, 'strInspectCallback', $str);
return $str;
}
/**
* Callback used by strInspect's preg_replace_callback
*
* @param array $matches matches
*
* @return string
*/
protected function strInspectCallback($matches)
{
$showHex = false;
if ($matches[1] !== '') {
// single byte sequence (may contain control char)
$str = $matches[1];
if (ord($str) < 32 || ord($str) == 127) {
$showHex = true;
if (in_array($str, array("\t","\n","\r"))) {
$showHex = false;
}
}
} elseif ($matches[2] !== '') {
// Valid byte sequence. return unmodified.
$str = $matches[2];
$sequences = array(
"\xef\xbb\xbf", // BOM
"\xc2\xa0", // no-break space
// "\xE2\x80\x89", // thin space
// "\xE2\x80\xAF", // narrow no-break space
"\xEF\xBF\xBD", // "Replacement Character"
);
foreach ($sequences as $seq) {
if ($str === $seq) {
$showHex = true;
break;
}
}
} elseif ($matches[3] !== '' || $matches[4] !== '') {
// Invalid byte
$str = $matches[3] != ''
? $matches[3]
: $matches[4];
$showHex = true;
} else {
// null char
$str = $matches[5];
$showHex = true;
}
if ($showHex) {
$chars = str_split($str);
foreach ($chars as $i => $c) {
$chars[$i] = '\x'.bin2hex($c);
}
$str = implode('', $chars);
}
return $str;
}
Я пробовал это, но это не будет работать для ASCII символов, я в основном ищет что-то для преобразования позволяет сказать: H в 0048, от 00 до 8 и т. Д. – Kwyjibo