могу ли я получить значение unicode символа или наоборот с php?

Можно ли ввести символ и вернуть значение Unicode? например, я могу положить & # 12103 в html для вывода «⽇», можно ли дать этот символ в качестве аргумента функции и получить номер в качестве вывода без создания таблицы Unicode?

$val = someFunction("⽇");//returns 12103 

или наоборот?

 $val2 = someOtherFunction(12103);//returns "⽇" 

Я хотел бы иметь возможность выводить фактические символы на страницу, а не коды, и я также хотел бы получить код от персонажа, если это возможно. Ближайший я получил к тому, что я хочу, это php.net/manual/en/function.mb-decode-numericentity.php, но я не могу заставить его работать, это тот код, который мне нужен, или я ошибаюсь?

Related of "могу ли я получить значение unicode символа или наоборот с php?"

 function _uniord($c) { if (ord($c{0}) >=0 && ord($c{0}) <= 127) return ord($c{0}); if (ord($c{0}) >= 192 && ord($c{0}) <= 223) return (ord($c{0})-192)*64 + (ord($c{1})-128); if (ord($c{0}) >= 224 && ord($c{0}) <= 239) return (ord($c{0})-224)*4096 + (ord($c{1})-128)*64 + (ord($c{2})-128); if (ord($c{0}) >= 240 && ord($c{0}) <= 247) return (ord($c{0})-240)*262144 + (ord($c{1})-128)*4096 + (ord($c{2})-128)*64 + (ord($c{3})-128); if (ord($c{0}) >= 248 && ord($c{0}) <= 251) return (ord($c{0})-248)*16777216 + (ord($c{1})-128)*262144 + (ord($c{2})-128)*4096 + (ord($c{3})-128)*64 + (ord($c{4})-128); if (ord($c{0}) >= 252 && ord($c{0}) <= 253) return (ord($c{0})-252)*1073741824 + (ord($c{1})-128)*16777216 + (ord($c{2})-128)*262144 + (ord($c{3})-128)*4096 + (ord($c{4})-128)*64 + (ord($c{5})-128); if (ord($c{0}) >= 254 && ord($c{0}) <= 255) // error return FALSE; return 0; } // function _uniord() 

а также

 function _unichr($o) { if (function_exists('mb_convert_encoding')) { return mb_convert_encoding('&#'.intval($o).';', 'UTF-8', 'HTML-ENTITIES'); } else { return chr(intval($o)); } } // function _unichr() 

Вот более компактная реализация unichr / uniord на основе pack :

 // code point to UTF-8 string function unichr($i) { return iconv('UCS-4LE', 'UTF-8', pack('V', $i)); } // UTF-8 string to code point function uniord($s) { return unpack('V', iconv('UTF-8', 'UCS-4LE', $s))[1]; } 

Это также работает (для тех, кто понимает, что битвитирование может быть более читаемым, чем ответит Марк Бейкерс):

 public function ordinal($str){ $charString = mb_substr($str, 0, 1, 'utf-8'); $size = strlen($charString); $ordinal = ord($charString[0]) & (0xFF >> $size); //Merge other characters into the value for($i = 1; $i < $size; $i++){ $ordinal = $ordinal << 6 | (ord($charString[$i]) & 127); } return $ordinal; } 

Вы можете использовать следующие функции:

Для кодирования

 string utf8_encode ( string $data ) 

http://php.net/manual/en/function.utf8-encode.php

Для декодирования

 string utf8_decode ( string $data ) 

http://php.net/manual/en/function.utf8-decode.php

Также проверьте

http://php.net/manual/en/function.htmlspecialchars.php

 <?php echo htmlspecialchars_decode("&#12103");//will print ⽇ ?>