php substr()函數截取中文字符串亂碼
來源:程序員人生 發布時間:2013-10-30 10:19:19 閱讀次數:3656次
在php中如果我要用substr()截取字符串全英文的沒問題,如果包括有中文或英文就會悲劇了,但大家也 別切我們可以使用其它辦法來解決.
php截取中文字符串出現亂碼,這是最近發現的事情,先前我曾經寫過一篇關于自動生成meta信息的文章,那篇關于利用php截取文章前多少字作為description方法,但是出現了IE6無法加載CSS的現象,這里做一個補充。
首先要明確這么一個問題,之所以會出現IE6偶爾無法加載CSS的現象,是因為文件出現了亂碼,導致后面的加載CSS的link無法被IE6正確解析,因此就看到了一個純HTML頁面,沒有CSS,赤裸裸!
明確了問題,剩下的問題就好解決了,就是防止亂碼,既然萬戈所提供的函數出現了亂碼,就重新去找了一個php函數來解決這個亂碼的問題。
substr()函數可以分割文字,但要分割的文字如果包括中文字符往往會遇到問題。
mb_substr()這個函數的用法與substr()相似,只是在最后要加入多一個參數,以設定字符串的編碼,通過這里大幾就應該理解我改進萬戈方法的原因了~~下面再介紹幾個更高級處理辦法
例1代碼如下:
- function func_chgtitle($str,$len) {
- $tmpstr = "";
- $strlen = $len;
- for($i = 0; $i < $strlen; $i++) {
- if(ord(substr($str, $i, 1)) > 0xa0) {
- $tmpstr .= substr($str, $i, 2);
- $i++;
- } else
- $tmpstr .= substr($str, $i, 1);
- }
- return $tmpstr;
- }
例2字符串編碼為UTF-8的,一個中文字符占三個字節:
- public static function chinesesubstr($str, $start, $len) {
-
- 起始位置,$len指字符串長度
- $strlen = $start + $len;
- 串的總長度
- 代碼如下 復制代碼
- for($i = $start; $i < $strlen;) {
- if (ord ( substr ( $str, $i, 1 ) ) > 0xa0) {
- 值大于0xa0,則表示漢字
- $tmpstr .= substr ( $str, $i, 3 );
- 于一個漢字
- $i=$i+3;
- } else{
- $tmpstr .= substr ( $str, $i, 1 );
- 變量$tmpstr
- $i++;
- }
- }
- return $tmpstr;
- }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈