diff --git a/core/helpers/Chaos.php b/core/helpers/Chaos.php new file mode 100644 index 0000000..4623392 --- /dev/null +++ b/core/helpers/Chaos.php @@ -0,0 +1,180 @@ +_pinyin = new PinYin(); + } + + /** + * @param array $prefix + */ + public function addPrefix(array $prefix) { + $this->prefix=$prefix[array_rand($prefix)]; + } + + public function clearPrefix() { + $this->prefix=''; + } + public function get($str) { + $this->cutting($str); + $this->convert(); + $this->clearPrefix(); + return $this->msg; + } + + //分离URL + private function cutting($str){ + + if(preg_match("@(http://[^\\s]+)@i", $str, $result)) { + $this->url = $result[1]; + $this->msg = $str = str_replace($this->url, '%%%%', $str); + } else { + $this->msg = $str; + } + } + + + + private function convert( $method = 'msg' ){ + if( $method == 'msg' || $method == 'all') { + $this->msg = $this->setPinyin($this->msg); + $this->msg = $this->setRepeat($this->msg); + //$this->msg = $this->GbToBig($this->msg); + $this->msg = $this->setBlankness($this->msg); + + } + if( $method == 'url' || $method == 'all') { + $this->url = $this->setChacha($this->url); + } + $this->msg=$this->prefix.str_replace( '%%%%', $this->url, $this->msg); + } + + function setChacha($url ){ + $url = strtolower($url); + $arr = array( + 'a' => array('a','A','a','A','Α','А','α'), + 'b' => array('b','B','b','B','Β','В','Ь'), + 'c' => array('c','C','c','C','С','с'), + 'd' => array('d','D','d','D'), + 'e' => array('e','E','e','E','Ε','Е','е'), + 'f' => array('f','F','f','F'), + 'g' => array('g','G','g','G'), + 'h' => array('h','H','h','H','Η','Н','н'), + 'i' => array('i','I','i','I','Ι','Ⅰ'), + 'j' => array('j','J','j','J'), + 'k' => array('k','K','k','K','Κ','κ','к','К'), + 'l' => array('l','L','l','L','︱','︳','|'), + 'm' => array('m','M','m','M','Μ','М','м'), + 'n' => array('n','N','n','N','Ν','∩'), + 'o' => array('o','O','o','O','Ο','О'), + 'p' => array('p','P','p','P','Ρ','Р','р'), + 'q' => array('q','Q','q','Q'), + 'r' => array('r','R','r','R'), + 's' => array('s','S','s','S'), + 't' => array('t','T','t','T','Τ','Т','ㄒ'), + 'u' => array('u','U','u','U','∪'), + 'v' => array('v','V','v','V','∨','ν'), + 'w' => array('w','W','w','W'), + 'x' => array('x','X','x','X','Χ','χ','Х','х','Ⅹ','×'), + 'y' => array('y','Y','y','Y','У'), + 'z' => array('z','Z','z','Z','Ζ'), + + '1' => array('1','1'), + '2' => array('2','2'), + '3' => array('3','3'), + '4' => array('4','4'), + '5' => array('5','5'), + '6' => array('6','6'), + '7' => array('7','7'), + '8' => array('8','8'), + '9' => array('9','9'), + '0' => array('0','0'), + + ':' => array(':',':','∶'), + '/' => array('/','/'), + '.' => array('。','·','.','、','﹒',',','丶') + + ); + $len = strlen( $url ); + $temp = "\n\n"; + for( $i=0; $i<$len; $i++){ + $t_str = substr( $url, $i, 1 ); + $sj = mt_rand( 0, count($arr[$t_str])-1 ); + $temp .= $arr[$t_str][$sj]; + } + return $temp; + } + + //随机把一个字符转为拼音 + function setPinyin($str) { + $py = mt_rand(0, iconv_strlen( $str, 'UTF-8' )-1); + $t_str = iconv_substr( $str, $py, 1, 'UTF-8'); + if(mt_rand(0,10) > 5) $pinyin = " "; + $pinyin = $this->_pinyin->convert($t_str,PINYIN_UNICODE); + $pinyin=implode(" ",$pinyin); + if(mt_rand(0,10) > 5) $pinyin .= " "; + if($t_str != "%"){ + $str = preg_replace("'$t_str'", $pinyin, $str, 1); + } + return $str; + } + + //随机重复一个字符 + function setRepeat($str) { + $len = iconv_strlen( $str, 'UTF-8' ); + $action = 0; + $temp = ''; + for( $i=0; $i<$len; $i++ ){ + $t_str = iconv_substr( $str, $i, 1 ,'UTF-8'); + if( mt_rand( 1, 50 ) > 48 && $action == 0) { + if(!preg_match("@[a-z0-9%\\s]+@i", $t_str)) { + $temp .= $t_str; + $action = 1; + } + } + $temp .= $t_str; + } + return $temp; + } + + //随机插入不影响阅读的字符 + function setBlankness($str) { + $blankness = array(" ", ' ', '҉','̅̅','̲','̲̲','̅','̲̲̅̅'); + $len = iconv_strlen( $str, 'UTF-8' ); + $temp = ''; + for( $i=0; $i<$len; $i++ ){ + $t_str = iconv_substr( $str, $i, 1 ,'UTF-8'); + if( mt_rand( 1, 50 ) > 48 ) { + if(!preg_match("@[a-z0-9%\\s]+@i", $t_str)) { + $temp .= $blankness[mt_rand(0, 7)]; + } + } + $temp .= $t_str; + } + return $temp; + } + + //随机进行繁体中文转换 + function GbToBig( $str ){ + $len = iconv_strlen( $str, 'UTF-8' ); + $temp = ''; + for( $i=0; $i<$len; $i++ ){ + $t_str = iconv_substr( $str, $i, 1 ,'UTF-8'); + if( mt_rand( 1, 50 ) > 48 ) { + $t_str = strtr( $t_str, $this->GbToBigArray ); + } + $temp .= $t_str; + } + return $temp; + } +} + + diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 1b6f180..20cdf45 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -11,4 +11,5 @@ - [视图](/view) - [异常](/exception) -  拓展 - - 待添加 \ No newline at end of file + - [拼音转换](/pinyin) + - [字符打乱](/chaos) \ No newline at end of file diff --git a/docs/chaos.md b/docs/chaos.md new file mode 100644 index 0000000..4697382 --- /dev/null +++ b/docs/chaos.md @@ -0,0 +1,37 @@ +## 字符打乱 +`puck`可以支持生成添加干扰符号,字符码等的变形字体,以实现个性的效果。  + +## 用法 + +### 基本用法 +```php +use puck\helpers\Chaos; +$s='你好'; +$chaos = new Chaos(); + $prefix=[ + '[微笑]', + '[大笑]', + '[色]', + '[失望]', + '[皱眉]', + '[哭]', + '[惊恐]', + '[亲亲]', + '[大眼]', + '[抓狂]', + '[脸红]', + '[书呆子]', + '[可爱]', + '[吐舌]', + '[眨眼]', + '[好吃]', + '[天使]', + '[得意]', + '[讽刺]', + '[花痴]', + '[惊讶]' + ]; +$chaos->addPrefix($prefix); +echo $chaos->get($s); +//[惊讶]ni好 +``` diff --git a/docs/pinyin.md b/docs/pinyin.md new file mode 100644 index 0000000..1a4f555 --- /dev/null +++ b/docs/pinyin.md @@ -0,0 +1,56 @@ +## 拼音扩展 +`puck`支持中文和拼音间的转换,对地名,人名,句子等均有处理,它甚至能支持音调的携带。 +这个扩展库由[https://github.com/overtrue/pinyin](https://github.com/overtrue/pinyin)提供技术支持。 + +## 用法 + +### 基本用法 +```php +use puck\helpers\Pinyin; +$pinyin = new Pinyin(); +$pinyin->convert('带着希望去旅行,比到达终点更美好'); +// ["dai", "zhe", "xi", "wang", "qu", "lv", "xing", "bi", "dao", "da", "zhong", "dian", "geng", "mei", "hao"] +$pinyin->convert('带着希望去旅行,比到达终点更美好', PINYIN_UNICODE); +// ["dài","zhe","xī","wàng","qù","lǚ","xíng","bǐ","dào","dá","zhōng","diǎn","gèng","měi","hǎo"] + +$pinyin->convert('带着希望去旅行,比到达终点更美好', PINYIN_ASCII); +//["dai4","zhe","xi1","wang4","qu4","lv3","xing2","bi3","dao4","da2","zhong1","dian3","geng4","mei3","hao3"] + +``` + +### 生产用于链接 + +```php +$pinyin->permalink('带着希望去旅行'); // dai-zhe-xi-wang-qu-lv-xing +$pinyin->permalink('带着希望去旅行', '.'); // dai.zhe.xi.wang.qu.lv.xing +``` + +### 获取首字符 + +```php +$pinyin->abbr('带着希望去旅行'); // dzxwqlx +$pinyin->abbr('带着希望去旅行', '-'); // d-z-x-w-q-l-x +``` + +### 生成句子 + +```php +$pinyin->sentence('带着希望去旅行,比到达终点更美好!'); +// dai zhe xi wang qu lv xing, bi dao da zhong dian geng mei hao! + +$pinyin->sentence('带着希望去旅行,比到达终点更美好!', true); +// dài zhe xī wàng qù lǚ xíng, bǐ dào dá zhōng diǎn gèng měi hǎo! +``` + +### 翻译姓名 + +```php +$pinyin->name('单某某'); // ['shan', 'mou', 'mou'] +$pinyin->name('单某某', PINYIN_UNICODE); // ["shàn","mǒu","mǒu"] +``` + +### 专用名词 + +```php +$pinyin->noun('山西'); // ShanXi +``` \ No newline at end of file