我对多字节字符串有一个独特的问题,需要能够以一定程度的随机性随机排列 PHP 中的长 UTF-8 编码多字节字符串,而不会丢失、丢失或重复任何字符。
在 str_shuffle 下的 PHP 手册中,有一个多字节函数(第一个用户提交的函数)不起作用:如果我使用一个字符串,例如字符串长度为 120 的所有日文平假名和片假名字符,我返回了一个 119 个字符或 118 个字符的字符串。有时我会看到重复的字符,即使原始字符串中没有它们。所以这不起作用。
为了使这更复杂,如果可能的话,我还需要包括日语 UTF-8 换行符、换行符和标点符号。
任何有使用 UTF-8 mb 字符串处理多种语言经验的人都可以帮忙吗? PHP 是否有任何内置函数来执行此操作? str_shuffle 正是我想要的。我只需要它也能处理多字节字符。
非常感谢!
最佳答案
尝试使用 mb_strlen
拆分字符串和 mb_substr
创建一个数组,然后使用 shuffle
在再次将其重新组合在一起之前。 (编辑:正如@Frosty Z 的回答中所展示的那样。)
来自 PHP 交互式提示的示例:
php > $string = "Pretend I'm multibyte!";
php > $len = mb_strlen($string);
php > $sploded = array();
php > while($len-- > 0) { $sploded[] = mb_substr($string, $len, 1); }
php > shuffle($sploded);
php > echo join('', $sploded);
rmedt tmu nIb'lyi!eteP
您需要确保在适当的地方指定编码。
关于php真正的多字节字符串随机播放功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5411060/