我有一个多字节字符串的独特问题,并且需要能够以一定程度的随机性,在PHP中使用长UTF-8编码的多字节字符串进行随机播放,而不会丢失或丢失或重复任何字符。
在str_shuffle下的PHP手册中,有一个不起作用的多字节函数(第一个用户提交了一个):如果我使用一个字符串,例如所有日语平假名和片长的片假名(ex)120 chars,我返回了一个字符串,其中包含119个字符或118个字符。有时我看到重复的字符,即使原始字符串没有它们。所以这不起作用。
为了使这更复杂,我还需要包括可能的日语UTF-8换行符和换行符以及标点符号。
有经验使用UTF-8 mb字符串处理多种语言的人有帮助吗? PHP有任何内置函数来执行此操作吗? str_shuffle完全是我想要的。我只需要它也可以处理多字节字符。
非常感谢!
答案 0 :(得分:3)
尝试使用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
您需要确保在适当的时候指定编码。
答案 1 :(得分:0)
这也应该可以解决问题。我希望。
array.sort([compareFunction])
答案 2 :(得分:0)
我喜欢使用这个功能:
function mb_str_shuffle($multibyte_string = "abcčćdđefghijklmnopqrsštuvwxyzžß,.-+'*?=)(/&%$#!~ˇ^˘°˛`˙´˝") {
$characters_array = mb_str_split($multibyte_string);
shuffle($characters_array);
return implode('', $characters_array); // or join('', $characters_array); if you have a death wish (JK)
}
当然,我通常不会有函数参数的默认值。