您的位置:首页 > 编程语言 > PHP开发

php 字符串转数组 提取中文 提取英文 字符串类型

2014-10-08 16:05 417 查看
获取字符串类型
/**
* 判断中英文
*/
public function checkStr($str){
$output = ''; ///\<[\s\S]*\>/i
$a = preg_match('/[' . chr(0xa1) . '-' . chr(0xff) . ']/i', $str);
$b = preg_match('/[0-9]/i', $str);
$c = preg_match('/[a-zA-Z]/i', $str);
if($a && $b && $c){
$output = 1; //'汉字数字英文的混合字符串';
}elseif($a && $b && !$c){
$output = 2; //'汉字数字的混合字符串';
}elseif($a && !$b && $c){
$output = 3; //'汉字英文的混合字符串';
}elseif(!$a && $b && $c){
$output = 4; //'数字英文的混合字符串';
}elseif($a && !$b && !$c){
$output = 5; //'纯汉字';
}elseif(!$a && $b && !$c){
$output = 6; //'纯数字';
}elseif(!$a && !$b && $c){
$output = 7; //'纯英文';
}
return $output;
}


提取中文
/**
*
* 只提取中文名称
* @param $srchKeyword
*/
public function getCN($srchKeyword){
$preg_repOne = array("|[0-9a-zA-Z/-]+|", '/\(|\)/', '/\《|\》/', '/\+|\-|\*|\//' , '/\{|\}/', '/\<|\>/', '/\【|\】/', '/\[|\]/', '/\(|\)/'
);
$preg_repTwo = array(' ',
PHP_EOL,'+',
'-', '\'', '/', '\\', '[', ']', '{', '}', 'è', 'β', '±', '^', '’', '~', '-', '+', '.', '。', '\'', '#', '@', '!', '&', '*', '<', '>', '%', 'α', 'γ', 'ε', '', '<i>', '</i>' , '[', ']', '-', 'δ', '+', '【', '】', '#', ';', '\\r', '\′', '′', ',', '_');
$str = preg_replace($preg_repOne, array('', ''), $srchKeyword);
$str = str_replace($preg_repTwo, array('', ''), $str);
$str = mb_substr($str,0,255,'utf-8');
return trim($str);
}


提取英文
/**
* 提取英文
* @param $srchKeyword
*/
public function getEN($srchKeyword){
$preg_repOne = array('/[-][a-zA-Z][0-9]/i', '/[0-9]/i', '/[a-zA-Z][0-9][-]/i', '/[^\[0-9]da-zA-Z]/i', '/\(|\)/', '/\《|\》/', '/\+|\-|\*|\//' , '/\{|\}/', '/\<|\>/', '/\【|\】/', '/\[|\]/', '/\(|\)/'
);
$preg_repTwo = array(' ',
PHP_EOL,
'-', '\'', '/', '\\', '[', ']', '{', '}', 'è', 'β', '±', '^', '’', '~', '-', '+', '.', '。', '\'', '#', '@', '!', '&', '*', '<', '>', '%', 'α', 'γ', 'ε', '', '<i>', '</i>' , '[', ']', '-', 'δ', '+', '【', '】', '#', ';', '\\r', '\′', '′', '(', ')', '(', ')', ',', '_');
$str = preg_replace($preg_repOne, array('', ''), $srchKeyword);
$str = str_replace($preg_repTwo, array('', ''), $str);
$str = mb_substr($str, 0, 255, 'utf-8');
return strtolower($str);
}


字符串转数组
/**
* 字符串转数组
* @param $key_words 传入的字符串
* @param $type 字符串类型
*/
function get_key_arr($key_words,$type = 'en'){
$ex_ = 1;
$str_len = strlen($key_words);
$return_arr = '';
if($type == 'cn'){
$ex_ = 3;//汉字占3个长度
$str_num = ceil($str_len/$ex_);
for ($i = 1; $i <= $str_num; $i++) {
$start = ($i-1)*$ex_;
$return_arr [] = substr($key_words,$start,$ex_);
}
}else{
for ($i = 0; $i < $str_len; $i++) {
$return_arr [] = $key_words[$i];
}
}
$return_arr = array_unique($return_arr);
return $return_arr;
}


高亮显示
/**
* 高亮显示函数
* @param  $message 需要高亮字的符串
* @param  $str	    需要高亮的部分字符串
* @param  $color   高亮显示颜色
*/
function bat_highlight($message,$str,$color = '#ff0000'){

$checkstr = $this->checkStr($str);
if($checkstr== 7 || $checkstr == 4){
$words_info_en = $this->getEN($str);
$return_arr = $this->get_key_arr($words_info_en);
}elseif($checkstr== 1 || $checkstr == 2 || $checkstr == 3 || $checkstr == 5){
$words_info_cn = $this->getCN($str);
$return_arr = $this->get_key_arr($words_info_cn,'cn');
}
foreach ($return_arr as $value) {
$message = preg_replace("/($value)/i", '@#\1#@',$message);
}
/**
* 把标识替换回来
* @# == <span style="color:#ff0000">
* #@ == </span>
*/
$message = str_replace('@#', '<span style="color:'.$color.'">', $message);
$message = str_replace('#@', '</span>', $message);
return $message;
}


好了,到此结束,如有问题,给我留言!
本文出自 “喜欢这里” 博客,请务必保留此出处http://liuzan.blog.51cto.com/6103676/1561279
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: