ホームページ  >  記事  >  バックエンド開発  >  PHP 中国語サポート関数 PHP 中国語インターセプト文字列関数 PHP 中国語文字列反転

PHP 中国語サポート関数 PHP 中国語インターセプト文字列関数 PHP 中国語文字列反転

WBOY
WBOYオリジナル
2016-07-25 08:57:34916ブラウズ
  1. /**
  2. * 全角の数字、文字、スペース、「%+-()」文字を含む文字列を対応する半角文字に変換します
  3. *
  4. * @access public
  5. * @param string $str 変換対象の文字列
  6. *
  7. * @return string $str 処理された文字列
  8. */
  9. function make_semiangle($str)
  10. {
  11. $arr = array('0' => '0', '1' => ' 1'、'2' => '3'、'4' => '5'、'6' => '6'、'7' => '8'、'9' => 'A'、'B' => ; 'B'、'C' => 'D'、'E' => 'F'、'G' = >「G」、「H」=>「I」、「J」=>「K」、「L」 =>'L'、'M' =>'N'、'O' =>'P'、'Q' ' => 'Q'、'R' => 'S'、'T' => ' V'=>V、'W'=>X、'Y'=>Z、 'a' => 'b' => 'c' => 'e' => 、'f' => 'f'、'g' => 'h'、'i' => 'j' '、'k' => 'l'、'm' => 'n'、
  12. 'o' => o'、'p' => 'q'、'r' => 's'、
  13. 't' => 't'、'u' => 'u'、'v' => 'v'、'w' => 'w'、'x' => 'x'、
  14. 'y' => 'y'、'z' => 'z',
  15. '(' => '(', ')' => ')', '〔' => '[', '】' => ']'、'【' => '[',
  16. ']' => ']'、'〖' => '[', '〗' => ']'、'”' => '['、'”' => ']'、
  17. '''' => '[', '' => ']'、'{' => '{'、'}' => '}'、'《' => '<',
  18. '》' => '>',
  19. '%' => '%'、'+' => '+'、'—' => '-'、'-' => '-'、'~' => '-',
  20. ':' => ':'、'。' => '.'、'、' => ',', ',' => '.'、'、' => '.',
  21. ';' => ',', '?' => 「?」、「!」 => '!'、'…' => '-'、'‖' => '|',
  22. '”' => '"', ''' => '`', '''' => '`', '|' => '|', '〃' => '"',
  23. ' ' => ' ','$'=>'$','@'=>'@','#'=>'#','^'=>'^','&'=>' &','*'=>'*');
  24. return strtr($str, $arr);
  25. }
  26. 复制代码
  27. 例2,php中文截取字符串
/*
Utf-8、gb2312都サポートの汉字截取関数数

cut_str(字符串, 截取长度, 开始长度, 编码);

コード默认はutf-8
開始長度默认は0
* edit: bbs.it-home.org
    */
  1. function Cut_str($string, $sublen, $start = 0, $code = 'UTF-8' ) {
  2. if ($code == 'UTF-8') {
  3. $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]/";
  4. preg_match_all ( $pa, $string, $t_string );
  5. if (count ( $t_string [0] ) - $start > $sublen)
  6. return join ( '', array_slice ( $t_string [0] , $start, $sublen ) ) 。 「...」;
  7. return join ( '', array_slice ( $t_string [0], $start, $sublen ) );
  8. } else {
  9. $start = $start * 2;
  10. $sublen = $sublen * 2;
  11. $strlen = strlen ( $string );
  12. $tmpstr = '';
  13. for($i = 0; $i if ($i >= $start && $i if (ord ( substr ( $string, $i, 1 ) ) > 129) {
  14. $tmpstr .= substr ( $string, $i, 2 );
  15. } else {
  16. $tmpstr .= substr ( $string, $i, 1 );
  17. }
  18. }
  19. if (ord ( substr ( $string, $i, 1 ) ) > 129)
  20. $i ++;
  21. }
  22. if (strlen ( $tmpstr ) < $strlen)
  23. $tmpstr .= "...";
  24. $tmpstr を返します。
  25. }
  26. }
  27. $str = "abcd 必要截取的文字列";
  28. echo Cut_str ( $str, 1, 0, 'gb2312' );
  29. ?>
  30. 复制代
  31. 例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 =間違い;
    23. 休憩;
    24. }
    25. }
    26. if($flag){//適合
    27. $match_haystack[$i] = $str;
    28. for($j = 1; $j $match_haystack[$i + $j] = "";
    29. }
    30. }
    31. }
    32. }
    33. }
    34. return implode("", $match_haystack);
    35. }
    复制代


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。