国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 建站經(jīng)驗 > 正文

php字符串截取,支持中文和其他編碼

2024-04-25 20:36:50
字體:
供稿:網(wǎng)友

本文章總結(jié)了在php函數(shù)substr的基礎(chǔ)上來截取字符串的函數(shù),在碰到中文時出現(xiàn)漢字截取一半出現(xiàn)亂碼的解決辦法了,下面介紹了支持中文和其他編碼截取程序.

php代碼如下:

<?php

/**

* 字符串截取,支持中文和其他編碼

*

* @static

* @access public

* @param string $str 需要轉(zhuǎn)換的字符串

* @param string $start 開始位置

* @param string $length 截取長度

* @param string $charset 編碼格式

* @param string $suffix 截斷顯示字符

* @return string

*/

function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)

{

if(function_exists("mb_substr"))

mb_substr($str, $start, $length, $charset);

elseif(function_exists('iconv_substr')) {

iconv_substr($str,$start,$length,$charset);

}

$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], $str, $match);

$slice = join("",array_slice($match[0], $start, $length));

if($suffix) return $slice."…";

return $slice;

}

?>

如果我們直接使用了php substr來截取數(shù)據(jù)如在英文和漢字混合的情況下會出現(xiàn)如下問題,如果有這樣一個字符串:

$str="這是一個字符串";

為了截取該串的前10個字符,使用:

if(strlen($str)>10) $str=substr($str,10)."…";

那么,echo $str的輸出應(yīng)該是"這是一個字…"

假設(shè): $str="這是1個字符串";這個串中包含了一個半角字符,同樣執(zhí)行:

if(strlen($str)>10) $str=substr($str,10);

由于原字符串$str的第10、11個字符構(gòu)成了漢字“符”;執(zhí)行串分割后會將該漢字一分為二,這樣被截取的串就會發(fā)現(xiàn)亂碼現(xiàn)象,使用了上面這代碼字符截取代碼就可以方便的解決了這種問題了.

今天找到一個比較好的截取中文字符串方法,在此與大家共享,代碼如下:

function msubstr($str, $start, $len) {

$tmpstr = "";

$strlen = $start + $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;

}

程序二:PHP截取UTF-8字符串,解決半字符問題.

/******************************************************************

* PHP截取UTF-8字符串,解決半字符問題。

* 英文、數(shù)字(半角)為1字節(jié)(8位),中文(全角)為3字節(jié)

* @return 取出的字符串, 當$len小于等于0時, 會返回整個字符串

* @param $str 源字符串

* $len 左邊的子串的長度

****************************************************************/

function utf_substr($str,$len)

{

for($i=0;$i<$len;$i++)

{

$temp_str=substr($str,0,1);

if(ord($temp_str) > 127)

{

$i++;

if($i<$len)

{

$new_str[]=substr($str,0,3);

$str=substr($str,3);

}//開源代碼phpfensi.com

}

else

{

$new_str[]=substr($str,0,1);

$str=substr($str,1);

}

}

return join($new_str);

}

 

 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 江门市| 化州市| 屏东县| 永修县| 泸州市| 涟源市| 西乡县| 洞口县| 开封市| 晋中市| 四子王旗| 霍州市| 东方市| 彭山县| 沙坪坝区| 商都县| 廊坊市| 疏勒县| 六枝特区| 图木舒克市| 大悟县| 彩票| 田林县| 灯塔市| 福鼎市| 岳阳县| 关岭| 家居| 清水河县| 剑阁县| 高平市| 邓州市| 咸阳市| 屏南县| 九台市| 喜德县| 临洮县| 娱乐| 遂昌县| 周宁县| 利辛县|