Home  >  Article  >  Backend Development  >  PHP Chinese support function PHP Chinese interception string function PHP Chinese string flip

PHP Chinese support function PHP Chinese interception string function PHP Chinese string flip

WBOY
WBOYOriginal
2016-07-25 08:57:34904browse
  1. /**
  2. * Convert a string containing full-width numeric characters, letters, spaces or '%+-()' characters into corresponding half-width characters
  3. *
  4. * @access public
  5. * @param string $str String to be converted
  6. *
  7. * @return string $str processed string
  8. */
  9. function make_semiangle($str)
  10. {
  11. $arr = array('0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4',
  12. '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9',
  13. 'A' => 'A', 'B' => 'B', 'C' => 'C', 'D' => 'D', 'E' => 'E',
  14. 'F' => 'F', 'G' => 'G', 'H' => 'H', 'I' => 'I', 'J' => 'J',
  15. 'K' => 'K', 'L' => 'L', 'M' => 'M', 'N' => 'N', 'O' => 'O',
  16. 'P' => 'P', 'Q' => 'Q', 'R' => 'R', 'S' => 'S', 'T' => 'T',
  17. 'U' => 'U', 'V' => 'V', 'W' => 'W', 'X' => 'X', 'Y' => 'Y',
  18. 'Z' => 'Z', 'a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd',
  19. 'e' => 'e', 'f' => 'f', 'g' => 'g', 'h' => 'h', 'i' => 'i',
  20. 'j' => 'j', 'k' => 'k', 'l' => 'l', 'm' => 'm', 'n' => 'n',
  21. 'o' => 'o', 'p' => 'p', 'q' => 'q', 'r' => 'r', 's' => 's',
  22. 't' => 't', 'u' => 'u', 'v' => 'v', 'w' => 'w', 'x' => 'x',
  23. 'y' => 'y', 'z' => 'z',
  24. '(' => '(', ')' => ')', '〔' => '[', '〕' => ']', '【' => '[',
  25. '】' => ']', '〖' => '[', '〗' => ']', '“' => '[', '”' => ']',
  26. '‘' => '[', '’' => ']', '{' => '{', '}' => '}', '《' => '<',
  27. '》' => '>',
  28. '%' => '%', '+' => '+', '—' => '-', '-' => '-', '~' => '-',
  29. ':' => ':', '。' => '.', '、' => ',', ',' => '.', '、' => '.',
  30. ';' => ',', '?' => '?', '!' => '!', '…' => '-', '‖' => '|',
  31. '”' => '"', '’' => '`', '‘' => '`', '|' => '|', '〃' => '"',
  32. ' ' => ' ','$'=>'$','@'=>'@','#'=>'#','^'=>'^','&'=>'&','*'=>'*');
  33. return strtr($str, $arr);
  34. }
复制代码

例2,php中文截取字符串

  1. /*
  2. Utf-8、gb2312都支持的汉字截取函数
  3. cut_str(字符串, 截取长度, 开始长度, 编码);
  4. 编码默认为 utf-8
  5. 开始长度默认为 0
  6. * edit: bbs.it-home.org
  7. */
  8. function cut_str($string, $sublen, $start = 0, $code = 'UTF-8') {
  9. if ($code == 'UTF-8') {
  10. $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]/";
  11. preg_match_all ( $pa, $string, $t_string );
  12. if (count ( $t_string [0] ) - $start > $sublen)
  13. return join ( '', array_slice ( $t_string [0], $start, $sublen ) ) . "...";
  14. return join ( '', array_slice ( $t_string [0], $start, $sublen ) );
  15. } else {
  16. $start = $start * 2;
  17. $sublen = $sublen * 2;
  18. $strlen = strlen ( $string );
  19. $tmpstr = '';
  20. for($i = 0; $i < $strlen; $i ++) {
  21. if ($i >= $start && $i < ($start + $sublen)) {
  22. if (ord ( substr ( $string, $i, 1 ) ) > 129) {
  23. $tmpstr .= substr ( $string, $i, 2 );
  24. } else {
  25. $tmpstr .= substr ( $string, $i, 1 );
  26. }
  27. }
  28. if (ord ( substr ( $string, $i, 1 ) ) > 129)
  29. $i ++;
  30. }
  31. if (strlen ( $tmpstr ) < $strlen)
  32. $tmpstr .= "...";
  33. return $tmpstr;
  34. }
  35. }
  36. $str = "abcd需要截取的字符串";
  37. echo cut_str ( $str, 1, 0, 'gb2312' );
  38. ?>
复制代码

例3,字符串的载取

  1. /**
  2. * 字符截取 支持UTF8/GBK
  3. * @param $string
  4. * @param $length
  5. * @param $dot
  6. */
  7. function str_cut($string, $length, $charset = 'utf-8', $dot = '...') {
  8. $strlen = strlen($string);
  9. if($strlen <= $length) return $string;
  10. $string = str_replace(array(' ',' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), array('∵',' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $string);
  11. $strcut = '';
  12. if(strtolower($charset) == 'utf-8') {
  13. $length = intval($length-strlen($dot)-$length/3);
  14. $n = $tn = $noc = 0;
  15. while($n < strlen($string)) {
  16. $t = ord($string[$n]);
  17. if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
  18. $tn = 1; $n++; $noc++;
  19. } elseif(194 <= $t && $t <= 223) {
  20. $tn = 2; $n += 2; $noc += 2;
  21. } elseif(224 <= $t && $t <= 239) {
  22. $tn = 3; $n += 3; $noc += 2;
  23. } elseif(240 <= $t && $t <= 247) {
  24. $tn = 4; $n += 4; $noc += 2;
  25. } elseif(248 <= $t && $t <= 251) {
  26. $tn = 5; $n += 5; $noc += 2;
  27. } elseif($t == 252 || $t == 253) {
  28. $tn = 6; $n += 6; $noc += 2;
  29. } else {
  30. $n++;
  31. }
  32. if($noc >= $length) {
  33. break;
  34. }
  35. }
  36. if($noc > $length) {
  37. $n -= $tn;
  38. }
  39. $strcut = substr($string, 0, $n);
  40. $strcut = str_replace(array('∵', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), $strcut);
  41. } else {
  42. $dotlen = strlen($dot);
  43. $maxi = $length - $dotlen - 1;
  44. $current_str = '';
  45. $search_arr = array('&',' ', '"', "'", '“', '”', '—', '<', '>', '·', '…','∵');
  46. $replace_arr = array('&',' ', '"', ''', '“', '”', '—', '<', '>', '·', '…',' ');
  47. $search_flip = array_flip($search_arr);
  48. for ($i = 0; $i < $maxi; $i++) {
  49. $current_str = ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
  50. if (in_array($current_str, $search_arr)) {
  51. $key = $search_flip[$current_str];
  52. $current_str = str_replace($search_arr[$key], $replace_arr[$key], $current_str);
  53. }
  54. $strcut .= $current_str;
  55. }
  56. }
  57. return $strcut.$dot;
  58. }
复制代码

例4,PHP中文字符串翻转 翻转一个字符串可以使用strrev()函数即可。 但有时需要处理是字符串是含中文的,这样用strrev就会出现乱码。 这里自定义一个函数来处理含中文的字符。

  1. /**

  2. * 中文字符串翻转
  3. * by bbs.it-home.org
  4. */
  5. function cstrrev($str)
  6. {
  7. $len = strlen($str);
  8. for($i = 0; $i < $len; $i++)
  9. {
  10. $char = $str{0};
  11. if(ord($char) > 127)
  12. {
  13. $i++;
  14. if($i < $len)
  15. {
  16. $arr[] = substr($str, 0, 2);
  17. $str = substr($str, 2);
  18. }
  19. }
  20. else
  21. {
  22. $arr[] = $char;
  23. $str = substr($str, 1);
  24. }
  25. }
  26. return join(array_reverse($arr));
  27. }

  28. #使用方法:

  29. $str = '中文.look!';
  30. echo cstrrev($str);
  31. #结果输出:!kool.文中
复制代码

附5,

  1. function str_replace_cn($needle, $str, $haystack, $charset = "utf-8"){
  2. $re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
  3. $re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
  4. $re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
  5. $re['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
  6. preg_match_all($re[$charset], $haystack, $match_haystack);
  7. preg_match_all($re[$charset], $needle, $match_needle);
  8. for($i = 0; $i < count($match_needle); $i ++){
  9. if(!in_array($match_needle[0][$i], $match_haystack[0]))return $haystack;//无匹配
  10. }
  11. $match_haystack = $match_haystack[0];
  12. $match_needle = $match_needle[0];
  13. for($i = 0; $i < count($match_haystack); $i ++){
  14. if($match_haystack[$i] == "")continue;
  15. if($match_haystack[$i] == $match_needle[0]){
  16. if(count($match_needle) == 1){//如果只一个字符
  17. $match_haystack[$i] = $str;
  18. }else{
  19. $flag = true;
  20. for($j = 1; $j < count($match_needle); $j ++){
  21. if($match_haystack[$i + $j] != $match_needle[$j]){
  22. $flag = false;
  23. break;
  24. }
  25. }
  26. if($flag){//匹配
  27. $match_haystack[$i] = $str;
  28. for($j = 1; $j < count($match_needle); $j ++){
  29. $match_haystack[$i + $j] = "";
  30. }
  31. }
  32. }
  33. }
  34. }
  35. return implode("", $match_haystack);
  36. }
复制代码


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn