マルチバイト文字列とその処理方法を実験していました。ここで見ることができるコードを使用して
https://gist.github.com/charlydagos/89f67808e01f97e6de91
ほとんどの弦を回転させることに成功しました。しかし、私はその行に気づきました
$chr = mb_substr($str, $i, 1);
複数の Unicode コード ポイントを使用するため、フラグ emojisでは機能しません。
独自のシェルで次のことを試すことができます。
これにより、目的の出力が得られます。$ php string_rotate_mb.php "你好"
ただし、これは$ php string_rotate_mb.php ""
戻ります[H][C]
これは技術的に正しいですが、文字列を回転させました。しかし、実際にはそれは単一のグリフであり、私の目的の出力はフラグのみです (またはフラグのシーケンスで、さらに文字化けしたグリフになり、時には別のフラグに変わることさえあります)。
$length = 1
では、 を使用して、または$length = 2
(または$length = N
) 部分文字列を取得する必要があることを確実に判断するにはどうすればよいmb_substr
でしょうか?
参考までに、 、 、 、 を使用しPHP 7.0.2 (cli) (built: Jan 7 2016 10:40:26) ( NTS )
てZSH_VERSION = 5.2
いLC_ALL=en_us.utf-8
ますiTerm2: Build 2.9.git.8dff8db518
。
更新 - 2016 年 2 月 5 日
解決策: https://gist.github.com/charlydagos/6755ad994da07a7b4959#file-string_rotate_working-php-L39-L56
書記素クラスターの概念を紹介してくれたroelandに感謝します。次のリンクにも良い情報があります