PHP中截取中文亂碼解決辦法
來源:程序員人生 發布時間:2013-11-15 04:30:55 閱讀次數:4344次
如果ASCii碼大于0xa0就是半個漢字;了解substr()、mb_substr()、ord()。 現在常用的編碼格式是UTF8,GBK,GBK2312,BIG5。GBK是GBK2312的升級。現在我開發中遇到的基本都是UTF8,GBK常用在論壇BBS上。今天自己寫了下UTF8的,測試下還說的過去,畢竟從網上拷下來的是可以用,但是如果有時間最好還是自己寫一下,這樣只有到自己手里的才是自己的。
最簡的就是利用:例一
- echo substr("Hello world!",6);
-
- ?>
例二:
- echo substr("Hello world!",6,5);
- ?>
- 英文的話沒有問題,但是中文就出問題了,下面我們使用mb_substr函數處理。
-
-
-
-
-
-
-
-
- 代碼如下 復制代碼
- if(function_exists(‘mb_string’))
- {
- mb_substr($string,$start,$length,$encoding);
-
- }
- else mysubstr($string,$start,$length);
- ?>
首先定義自己的函數:
-
-
-
-
-
- function mysubstr($string, $start, $length)
- {
- if(strlen($string)>$length)
- {
- $str=”;
- $len=$start+$length;
- for($i=$start;$i<$len;$i++)
- {
- if(ord(substr($string,$i,1))>0xa0)
- {
- $str.=substr($string,$i,2);
- $i++;
- }
- else{ $str.=substr($string,$i,1);}
- }
- return $str.’…’;
- }
- else{ return $string;}
- }
還有一個問題要注意,使用這種方法的時候,你的標簽對里的charset只有設成中文的編碼才可以,如GBK,GB2312。
下面自己常用的一個中英文字符截取函數,自定義截取中文字符串函數,基本上就是仿照mb_substr寫個函數,直接調用罷了,以下為我找到的代碼,其實很簡單:
- function substr_cn($string_input,$start,$length)
- {
-
-
-
-
-
-
-
-
-
-
- $str_input=$string_input;
- $len=$length;
- $return_str="";
-
- for ($i=0;$i<2*$len+2;$i++)
- $return_str=$return_str." ";
- $start_index=0;
-
- for ($i=0;$i<$start;$i++)
- {
- if (ord($str_input{$start_index}>=161))
- {
- $start_index+=2;
- }
- else
- {
- $start_index+=1;
- }
- }
- $chr_index=$start_index;
-
- for ($i=0;$i<$len;$i++)
- {
- $asc=ord($str_input{$chr_index});
- if ($asc>=161)
- {
- $return_str{$i}=chr($asc);
- $return_str{$i+1}=chr(ord($str_input{$chr_index+1}));
- $len+=1;
- $i++;
- $chr_index+=2;
- continue;
- }
- else
- {
- $return_str{$i}=chr($asc);
- $chr_index+=1;
- }
- }
- return trim($return_str);
- }
- ?>
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈