字符串轉數組,字符串亂序
<?php /** * 字符串轉數組,字符串亂序 * 個人練習題 * 文件編碼和函數中的$charset必須一致,否則可能亂碼 * 20110609 https://yourshell.info/ * * $array = str2array($str, 'utf-8', 1); * $new_array = arrayshuffle($array); * print_r(join($new_array)); */ set_time_limit(0); // $str='我愛你url網址,你呢'; $str = 'url網址 < a href = "127.0.0.1/pe" title="摘要"/ >地方la</a >gfb6是否<body></html>'; // $str = file_get_contents('https://127.0.0.1/pe'); $array = str2array($str, 'utf-8', 1); print_r(join($array)); $new_array = arrayshuffle($array); echo "\r\n<br>"; print_r(join($new_array)) . "\r\n<br />"; function arrayshuffle($array){ # 必須和 str2array() 中的編碼($charset)一致,否則shuffle() 將導致亂碼 $key = array_keys($array); $key2 = shuffle($key); $n = count($array); $new_key = ''; $new_str = ''; $new_array = array(); for($i = 0; $i < $n; $i++){ $new_key .= $key[$i] . ','; $new_str = $array[$key[$i]]; $new_array[$key[$i]] = $array[$key[$i]]; } return $new_array; } function str2array($str, $charset, $len = 1){ # 字符串轉數組 $str = str_replace('< ', '<', $str); $str = str_replace(' >', '>', $str); $n = mb_strlen($str, $charset); for($i = 0;$i < $n;$i += $len) { if(mb_substr($str, $i, $len, $charset) == '<') { $part1 = mb_substr($str, $i, $n, $charset); # 截取剩餘的部分 preg_match("/(\<.*?\>)(.*?)(\>)/i", $part1, $matches); # 檢測$part1中HTML非單一標簽 if(isset($matches[0]) && strstr($matches[0], '<style') || isset($matches[0]) && strstr($matches[0], '<script')){ # 分析CSS和JS $strarr[] = $matches[0]; $taglen = mb_strlen($matches[0], $charset); # $taglen是閉合標簽的長度 }elseif(isset($matches[1])){ # 其它的非單一標簽 $strarr[] = $matches[1]; $taglen = mb_strlen($matches[1], $charset); }else{ preg_match("/(\<.*?\>)(.*?)/i", $part1, $matches); # 檢測$part1中HTML單一標簽 $strarr[] = $matches[1]; $taglen = mb_strlen($matches[1], $charset); } $i += $taglen; # $i的值 $i -= 1; continue; # 跳出本次循環,進行下一次循環 } $strarr[] = mb_substr($str, $i, $len, $charset); } return $strarr; } ?>