⛳
【PHP】OS 経由でコードポイントと文字の相互変換
proc_open
経由で OS コマンドでコードポイントから文字を生成してみた。PHP 7.4 からコマンドを配列で受け取れるようになった。
$c = sprintf('\\u%x', 0x3042);
$cmd = ['printf', '%b', $c];
$cmd2 = 'printf 🐶 | uconv -x "Any-Hex/Unicode"';
echo prop_exec($cmd), PHP_EOL;
echo prop_exec($cmd2), PHP_EOL;
function prop_exec($cmd) {
$descriptorspec = [
0 => ['pipe', 'r'],
1 => ['pipe', 'w']
];
$process = proc_open($cmd, $descriptorspec, $pipes);
return stream_get_contents($pipes[1]);
proc_close($process);
}
Debian で uconv
を導入するには icu-devtools パッケージを導入すればよい。
sudo apt install icu-devtools
shell_exec
を使ってコードポイントを求めることもできる。
$cmd = 'printf 🐶 | uconv -x "Any-Hex/Unicode"';
echo shell_exec("($cmd)"),PHP_EOL;
OS コマンドを利用せずに eval
でコードポイントから文字を生成することもできる。
$c = sprintf('\\u{%x}', 0x3042);
$cmd = 'echo "' . $c . '";';
ob_start();
eval($cmd);
$ret = ob_get_clean();
echo $ret, PHP_EOL;
Discussion