php str_shuffle里面的中文为什么乱码
2个回答
展开全部
str_shuffle() 函数随机地打乱字符串中的所有字符。
注意,打乱的是字符串中的“字符”
一个字母等于一个字符
一个汉字等于2个字符
所以这个函数会把汉字撕成两半后再随机排序,这样的结果显示出来当然是看不懂的乱码了
没有现成的方法去处理这个问题,不晓得你要这么搞有什么用?自己写了个方法,只能解决全中文字符串随机排序的问题,
思路:
1、设法把中文字符串转换成数组,如果字符串中有英文字母或数字将被删除(因为这些只占一个字符,处理起来比较麻烦,假设你的中文字符串不需要存在这样的字符更好)
2、把数组元素重新排序
3、把排序后的数组再转成字符串
$str = "里面的中文为什么乱码啊";
//干掉非utf8中文字符
$str = preg_replace('/[^\x{4e00}-\x{9fa5}]/u', '', $str);
//每隔3个字符插入一个“,”,转换为数组使用,使用strlen()测出php中一个中文霸占了3个
$re = chunk_split($str,3,",");
//转换为数组
$re = explode(",",$re);
shuffle($re);//随机重新排序数组
$newstr = implode($re); //把数据转为字符串
echo $newstr;
注意,打乱的是字符串中的“字符”
一个字母等于一个字符
一个汉字等于2个字符
所以这个函数会把汉字撕成两半后再随机排序,这样的结果显示出来当然是看不懂的乱码了
没有现成的方法去处理这个问题,不晓得你要这么搞有什么用?自己写了个方法,只能解决全中文字符串随机排序的问题,
思路:
1、设法把中文字符串转换成数组,如果字符串中有英文字母或数字将被删除(因为这些只占一个字符,处理起来比较麻烦,假设你的中文字符串不需要存在这样的字符更好)
2、把数组元素重新排序
3、把排序后的数组再转成字符串
$str = "里面的中文为什么乱码啊";
//干掉非utf8中文字符
$str = preg_replace('/[^\x{4e00}-\x{9fa5}]/u', '', $str);
//每隔3个字符插入一个“,”,转换为数组使用,使用strlen()测出php中一个中文霸占了3个
$re = chunk_split($str,3,",");
//转换为数组
$re = explode(",",$re);
shuffle($re);//随机重新排序数组
$newstr = implode($re); //把数据转为字符串
echo $newstr;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询