-
-
/**
- * 將一個字串中含有全角的數字字元、字母、空格或'%+-()'字元轉換為對應半角字元
- *
- * @access public
- * @param string $str 待轉換字串
- *
- * @return string $str 處理後字串
- */
- function make_semiangle($str)
- {
- $arr = 隊列( '0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4' ,
- '5 ' => '6', '7' => '8', '9' => '9',
- 'A' => 'A', 'B' => 'B', 'C' = > > 'D', 'E' => 'E',
- 'F', 'G' => 'H', 'I' => 'J' => 'K', 'L' => ' M', 'N' => 'N', 'O' => 'O',
- 'P', 'Q' => 'Q', 'R' => > 'S', 'T ' => 'U' => 'V', 'W' => X' => 'X', 'Y' => 'Y',
- 'Z' => 'a', 'b ' =>; ', 'c' => 'c', 'd' => 'd',
- 'e' => 'e', 'f' =>; > 'i',
- 'j', 'k' =>; ' => 'l', 'm' => 'n',
- 'o', 'p' =>, 'q ' => 'q', 'r ' => 'r', 's' => 's',
- 't' =>; 't', 'u' => 'u', 'v' => 'v', 'w' => 'w', 'x' => 'x',
- 'y' =>; 'y', 'z' => 'z',
- ' (' =>; '(', ')' => ')', '〔' => '[', ']' => ']', '【' => '[',
- '】 ' => ']', '〖 ' => '[', '〗' => ']', '“' => '[', '”' => ']',
- ''' = > '[', ''' = > ']', '{' => '{', '}' =>; '}', '《' => ' '》' => '>',
- '% ' =>; '+' => '+', '—' => '-', '-' => '-', '~' => ' -',
- ':' =>; ' :', '。 , '? ', ''' => '`', ''' => '`', '|' => '|', '〃' => '"' ,
- '' => ' ','$ '=>'$','@'=>'@','#'=>'#','^'=>'^','&' =>'&','*'=>'* ');
-
- return strtr($str, $arr);
- }
-
-
- 複製程式碼
-
例2,php中文截取字串
/* Utf-8、gb2312都支援的漢字截取函數 - cut_str(, 截取長度字串、開始長度、編碼);
- 編碼為預設utf-8
- 開始長度預設為0
- * edit: bbs.it-home.org
- */
- function cut_str($string , $sublen, $start = 0, $code = 'UTF-8') {
- if ($code == 'UTF-8') {
- $pa = "/[x01-x7f]|[ xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][ x80-xbf]|[xf1 -xf7][x80-xbf][x80-xbf][x80-xbf]/";
- preg_match_all ( $pa, $string, $t_string );
- if (count (count (count. $t_string [0] ) - $start > $sublen)
- return join ( '', array_slice ( $t_string [0], $start, $sublen ) ) 。 「…」;
- return join ( ' ', array_slice ( $t_string [0], $start, $sublen ) );
- } else {
- $start = $start * 2;
- $sublen = $sublen *
- $; strlen = strlen ( $string );
- $tmpstr = ''
- for($i = 0; $i if ($i >= $start && $ i if (ord ( substr ( $string, $i, 1 ) ) > 129) {
- $tmpstr .= substr ( $string, $i, 2 ) ;
- } else {
- $tmpstr .= substr ( $string, $i, 1 );
- }
- }
- if (ord ( substr ( $string, $i, 1 ) ) > 129)
- $i ++;
- }
- if (strlen ( $tmpstr ) $tmpstr .= "...";
- 回傳 $tmpstr;
- }
- }
- $str = "abcd 需要截取的字串";
- echo cut_str ( $str, 1, 0, 'gb2312' );
- ?
例3,字符串的载取
-
- /**
- * 字符截取 支持UTF8/GBK
- * @param $string
- * @param $length
- * @param $dot
- */
- function str_cut($string, $length, $charset = 'utf-8', $dot = '...') {
- $strlen = strlen($string);
- if($strlen <= $length) return $string;
- $string = str_replace(array(' ',' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), array('∵',' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $string);
- $strcut = '';
- if(strtolower($charset) == 'utf-8') {
- $length = intval($length-strlen($dot)-$length/3);
- $n = $tn = $noc = 0;
- while($n < strlen($string)) {
- $t = ord($string[$n]);
- if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
- $tn = 1; $n++; $noc++;
- } elseif(194 <= $t && $t <= 223) {
- $tn = 2; $n += 2; $noc += 2;
- } elseif(224 <= $t && $t <= 239) {
- $tn = 3; $n += 3; $noc += 2;
- } elseif(240 <= $t && $t <= 247) {
- $tn = 4; $n += 4; $noc += 2;
- } elseif(248 <= $t && $t <= 251) {
- $tn = 5; $n += 5; $noc += 2;
- } elseif($t == 252 || $t == 253) {
- $tn = 6; $n += 6; $noc += 2;
- } else {
- $n++;
- }
- if($noc >= $length) {
- break;
- }
- }
- if($noc > $length) {
- $n -= $tn;
- }
- $strcut = substr($string, 0, $n);
- $strcut = str_replace(array('∵', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), $strcut);
- } else {
- $dotlen = strlen($dot);
- $maxi = $length - $dotlen - 1;
- $current_str = '';
- $search_arr = array('&',' ', '"', "'", '“', '”', '—', '<', '>', '·', '…','∵');
- $replace_arr = array('&',' ', '"', ''', '“', '”', '—', '<', '>', '·', '…',' ');
- $search_flip = array_flip($search_arr);
- for ($i = 0; $i < $maxi; $i++) {
- $current_str = ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
- if (in_array($current_str, $search_arr)) {
- $key = $search_flip[$current_str];
- $current_str = str_replace($search_arr[$key], $replace_arr[$key], $current_str);
- }
- $strcut .= $current_str;
- }
- }
- return $strcut.$dot;
- }
复制代码
例4,PHP中文字符串翻转
翻转一个字符串可以使用strrev()函数即可。
但有时需要处理是字符串是含中文的,这样用strrev就会出现乱码。
这里自定义一个函数来处理含中文的字符。
-
-
/** - * 中文字符串翻转
- * by bbs.it-home.org
- */
- function cstrrev($str)
- {
- $len = strlen($str);
- for($i = 0; $i < $len; $i++)
- {
- $char = $str{0};
- if(ord($char) > 127)
- {
- $i++;
- if($i < $len)
- {
- $arr[] = substr($str, 0, 2);
- $str = substr($str, 2);
- }
- }
- else
- {
- $arr[] = $char;
- $str = substr($str, 1);
- }
- }
- return join(array_reverse($arr));
- }
#使用方法:
- $str = '中文.look!';
- echo cstrrev($str);
- #结果输出:!kool.文中
-
-
复制代码
附5,
-
-
function str_replace_cn($needle, $str, $haystack, $charset = "utf-8"){
- $ re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80 - xbf]{3}/";
- $re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
- $re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
- $re['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
-
- preg_match_all($re[$charset], $haystack, $match_haystack);
- preg_match_all($re[$charset], $needle, $match_needle);
-
- for($i = 0; $i if(!in_array($match_needle[0][$i], $match_haystack[ 0 ]))return $haystack;//無符合
- }
-
- $match_haystack = $match_haystack[0];
- $match_needle = $match_needle[0];
-
- for($i = 0; $i if($match_haystack[$i] == "")繼續;
- if($match_haystack[$i] == $match_needle[0]){
- if(count($match_needle) == 1){//若只有一個字元
- $match_haystack[$i] = $str;
- }else{
- $flag = true;
- for($j = 1; $j if($match_haystack[$i + $j] != $match_needle[$j]){
- $flag = false;
- 休息;
- }
- }
- if($flag){//符合
- $match_haystack[$i] = $str;
- for($j = 1; $j $match_haystack[$i + $j] = "";
- }
- }
- }
- }
- }
- return implode("", $match_haystack);
- }
複製程式碼
|