導航:首頁 > 編程語言 > php中英文字元串截取

php中英文字元串截取

發布時間:2022-09-06 01:45:14

php 如何實現按字數分割中英文混雜字元串成數組

以下是我編寫的代碼,實現對中英文混雜字元進行分割:

<?php
function mbStrSplit ($string, $len=1) {
$start = 0;
$strlen = mb_strlen($string);
while ($strlen) {
$array[] = mb_substr($string,$start,$len,"utf8");
$string = mb_substr($string, $len, $strlen,"utf8");
$strlen = mb_strlen($string);
}
return $array;
}

header('Content-type:text/html;charset=utf-8');
$str = '我愛北京3我愛上海-我愛xianggang';
$r = mbStrSplit($str, 4);
echo '<pre>';
print_r($r);
echo '</pre>';
?>

運行結果:

Array
(
[0] => 我愛北京
[1] => 3我愛上
[2] => 海-我愛
[3] => xian
[4] => ggan
[5] => g
)

⑵ php分割中英文字元串的幾種方

對一段文字按照字數進行分割,因為文字中可能是中英文混合的,而php函數strlen只能計算出字串的位元組數,於是自己實現了幾個函數,分享下。
例1,計算字元總長度。
01<?php
02functionccStrLen($str)#計算中英文混合<ahref="/"target="_blank"class="infotextkey">字元串</a>的長度
03{
04$ccLen=0;
05$ascLen=strlen($str);
06$ind=0;
07$hasCC=ereg(」[xA1-xFE]「,$str);#判斷是否有漢字
08$hasAsc=ereg(」[x01-xA0]「,$str);#判斷是否有ASCII字元
09if($hasCC&&!$hasAsc)#只有漢字的情況
10returnstrlen($str)/2;
11if(!$hasCC&&$hasAsc)#只有Ascii字元的情況
12returnstrlen($str);
13for($ind=0;$ind<$ascLen;$ind++)
14{
15if(ord(substr($str,$ind,1))>0xa0)
16{
17$ccLen++;
18$ind++;
19}
20else
21{
22$ccLen++;
23}
24}
25return$ccLen;
26}
27?>
例2,從左側截取字元串。
01<?php
02functionccStrLeft($str,$len)#從左邊截取中英文混合字元串
03{
04$ascLen=strlen($str);if($ascLen<=$len)return$str;
05$hasCC=ereg(」[xA1-xFE]「,$str);#同上
06$hasAsc=ereg(」[x01-xA0]「,$str);
07if(!$hasCC)returnsubstr($str,0,$len);
08if(!$hasAsc)
09if($len&0×01)#如果長度是奇數
10returnsubstr($str,0,$len+$len-2);
11else
12returnsubstr($str,0,$len+$len);
13$cind=0;$flag=0;$reallen=0;//實際取位元組長
14while($cind<$ascLen&&$reallen<$len)
15{//bywww.jbxue.com
16if(ord(substr($str,$cind,1))<0xA1){//如果該位元組為英文則加一
17$cind++;
18}else{//否則加2個位元組
19$cind+=2;
20}
21$reallen++;
22}
23returnsubstr($str,0,$cind);
24}
25?>
例3,把給定文字,按切割數量存入數組(適合短篇文字,長文章可沒分隔一部分就直接處理一次)
viewsourceprint?
01<?php
02functionSplitContent($content,$smslen){
03$str_tmp=$content;
04$arr_cont=array();
05$len_tmp=0;
06$i=0;//分割絕對位置
07while(strlen($str_tmp)>0){
08$str_tmp=ccStrLeft($str_tmp,$smslen);
09array_push($arr_cont,$str_tmp);
10$i+=strlen($str_tmp);
11$str_tmp=substr($content,$i,strlen($content));
12}
13return$arr_cont;
14}//bywww.jbxue.com
15?>
測試:
1<?php
2$str=』a計算中英文混合1234字元串的長度abcd』;
3echo$str.』的長度為:』.ccStrLen($str);
4echo『<br>』;
5$smslen=3;//截取長度
6print_r(SplitContent($str,$smslen));
7?>

⑶ php截取字元串方法

可以使用substr或者mb_substr截取字元串

⑷ PHP指定截取字元串中的中英文或數字字元的實例分享

我們在開發過程中,經常會碰到截取中文英文數字等的問題,大家知道中文所佔的字元和英文數字是不同的;然後我們就會在項目的common里寫一些日常的函數包含時間計算轉換和中英文字元截取的函數;比如截取中英文的函數沒個幾行代碼恐怕拿不下來的吧,現在就告訴大家一個簡單的(自己本地運行過的),如有問題,請大家多多指教

$c
=
'ddaabbccaa';
$d
=
'地球需要我們每個人的愛護';
$frist1
=
mb_substr(
$c,
0,
1
,"UTF-8");
//
d
$delete_last1
=
mb_substr($d,
-1,1,"UTF-8");
//

echo
$frist1.'+++'.$delete_last1.'<br/>';
//
d+++護
$frist2
=
mb_substr(
$d,
0,
1
,"UTF-8");
//

$delete_last2
=
mb_substr($d,
-1,1,"UTF-8");
//

echo
$frist2.'+++'.$delete_last2.'<br/>';
//
地+++護
$e
=
'11aa22cc33';
$f
=
'aa地球需要我們每個人的愛護';
$g
=
'地球需要我們每個人的愛護gg';
$h
=
'地球需要我們每個人的愛護';
$first3
=
mb_substr(
$e,
0,
1
,"UTF-8");
//
1
$last3
=
mb_substr(
$f,
0,
1
,"UTF-8");
//
a
$delete_last3
=
mb_substr($f,
-1,1,"UTF-8");
//

$delete_last4
=
mb_substr($g,
-1,1,"UTF-8");
//
g
$frist4
=
mb_substr(
$g,
0,
1
,"UTF-8");
//

$delete_last5
=
mb_substr($h,
-1,1,"UTF-8");
//

echo
$first3.'+++'.$last3.'---'.$delete_last3.'***'.$delete_last4.'&&&'.$frist4.'<br/>';
//
1+++a---護***g&&&地
echo
$last3.'...'.$delete_last3.'<br/>';
//
a...護
echo
$frist4.'...'.$delete_last5.'<br/>';
//
地...護
//
這樣不管字元串里是中英文數字等都是可以的無需判斷,如:
」地...護「
或者
「地...」
或者
「...護」
PS:過濾字元串中空格的方法
去除字元串首尾中英文空格的方法:
function
mbTrim($str)
{
return
mb_ereg_replace('(^(|
)+|(|
)+$)',
'',
$str);
}
下面的正則驗證時過濾掉用戶輸入的連續空格,包括全形空格和半形空格
$user
=
mb_ereg_replace('^(|
)+',
'',
$user);
$user
=
mb_ereg_replace('(|
)+$',
'',
$user);
$age
=
mb_ereg_replace('^(|
)+',
'',
$age);
$age
=
mb_ereg_replace('(|
)+$',
'',
$age);
$method
=
mb_ereg_replace('^(|
)+',
'',
$method);
$method
=
mb_ereg_replace('(|
)+$',
'',
$method);
$address
=
mb_ereg_replace('^(|
)+',
'',
$address);
$address
=
mb_ereg_replace('(|
)+$',
'',
$address);

⑸ php有沒有一種函數能從一個字元串中截取一段出來啊。

substr()和mb_substr()的用法一樣,區別只是mb_substr()可以針對中文,就是中英文的字元長度問題,英文佔用一個字元,一個漢字佔用兩個字元。

substr(string,start,length)
其中start的參數

正數 - 在字元串的指定位置開始
負數 - 在從字元串結尾的指定位置開始
0 - 在字元串中的第一個字元處開始
strstr() 函數搜索一個字元串在另一個字元串中的第一次出現
配合這幾個函數就可以做到很強大的截取功能。

⑹ php截取字元串之截取utf8或gbk編碼的中英文字元串示例

php中自帶strlen是返回的位元組數,對於utf8編碼的中文返回時3個,不滿足需求,下面給大家提供一個方法來完成這樣的功能
微博的發言有字數限制,其計數方式是,中文算2個,英文算1個,全形字元算2個,半形字元算1個。
php中自帶strlen是返回的位元組數,對於utf8編碼的中文返回時3個,不滿足需求。
mb_strlen
可以根據字元集計算長度,比如utf8的中文計數為1,但這不符合微博字數限制需求,中文必須計算為2才可以。
google了下,找到一個discuz中截取各種編碼字元的類,改造了下,已經測試通過.其中參數$charset
只支持gbk與utf-8。

代碼如下:
$a
=
"s@@你好";
var_mp(strlen_weibo($a,'utf-8'));

結果輸出為8,其中字母s計數為1,全形@計數為2,半形@計數為1,兩個中文計數為4。源碼如下:

代碼如下:
function
strlen_weibo($string,
$charset='utf-8')
{

$n
=
$count
=
0;

$length
=
strlen($string);

if
(strtolower($charset)
==
'utf-8')

{

while
($n
<
$length)

{

$currentByte
=
ord($string[$n]);

if
($currentByte
==
9
||

$currentByte
==
10
||

(32
<=
$currentByte
&&
$currentByte
<=
126))

{

$n++;

$count++;

}
elseif
(194
<=
$currentByte
&&
$currentByte
<=
223)

{

$n
+=
2;

$count
+=
2;

}
elseif
(224
<=
$currentByte
&&
$currentByte
<=
239)

{

$n
+=
3;

$count
+=
2;

}
elseif
(240
<=
$currentByte
&&
$currentByte
<=
247)

{

$n
+=
4;

$count
+=
2;

}
elseif
(248
<=
$currentByte
&&
$currentByte
<=
251)

{

$n
+=
5;

$count
+=
2;

}
elseif
($currentByte
==
252
||
$currentByte
==
253)

{

$n
+=
6;

$count
+=
2;

}
else

{

$n++;

$count++;

}

if
($count
>=
$length)

{

break;

}

}

return
$count;

}
else

{

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

{

if
(ord($string[$i])
>
127)

{

$i++;

$count++;

}

$count++;

}

return
$count;

}
}

⑺ php截取字元串函數

$str=implode("|",$arr);
echo $str;
input:
小明|小黑|小天|小白

⑻ 如何在php中截取字元串「xxx

substr(string,start,length)
string表示要截取的對象,start表示從哪個位置開始截取,0表示從頭開始,正數表示從這個數的位置後面截取,負數表示從結尾算開始截取的位置,但依然是從左到右截,length表示截取長度.負數表示排除或忽略結尾多少個字元
中文截取
mb_substr( $str, $start, $length, $encoding )
$str,需要截斷的字元串
$start,截斷開始處,起始處為0
$length,要截取的字數
$encoding,網頁編碼,如utf-8,一個漢字是3個位元組

⑼ php截取字元串

這個問題我回答了好幾個了:
/* 截取一定長度的完整的中文字元 */

function cnsubstr($str,$strlen=10) {

if(empty($str)||!is_numeric($strlen)){
return false;
}
if(strlen($str)<=$strlen){
return $str;
}

//得到第$length個字元 並判斷是否為非中文 若為非中文
//直接返回$length長的字元串
$last_word_needed=substr($str,$strlen-1,1);
if(!ord($last_word_needed)>128){
$needed_sub_sentence=substr($str,0,$strlen);
return $needed_sub_sentence;
}else{
for($i=0;$i<$strlen;$i++){
if(ord($str[$i])>128){
$i++;
}
}//end of for
$needed_sub_sentence=substr($str,0,$i);
return $needed_sub_sentence;
}
}
直接調用這個函數就可以了。

⑽ PHP自定義函數如何截取中英文字元串代碼如下: <php header("content-ty

我記得我回答過類似問題,
function cn_substr($str,$len){
for($q=0;$q<$len;$q++){ //循環
if(ord(substr($str,$q))>0xa0){ //判斷 0xa0=160
$tmpstr.=substr($str,$q,3);
$q+=3;
}else{
$tmpstr.=substr($str,$q,1);
}
return $tmpstr;
}
}
echo cn_substr ($str,5);//請在函數外調用

閱讀全文

與php中英文字元串截取相關的資料

熱點內容
死循環會在編譯的時候出錯嗎 瀏覽:984
c51單片機特殊寄存器的原理 瀏覽:576
閃耀永恆特利加密鑰 瀏覽:758
如何誇程序員 瀏覽:776
天津期貨python招聘 瀏覽:263
單片機機器語言寫的程序 瀏覽:548
韓國直播軟體app叫什麼名 瀏覽:916
軍營訓練不聽教官的命令 瀏覽:259
v開頭的音樂播放器是什麼APP 瀏覽:117
單片機是怎麼做出來的 瀏覽:315
博圖怎麼作為opc伺服器 瀏覽:100
編譯做題軟體 瀏覽:293
橋梁檢測pdf 瀏覽:685
化解壓力的一種方法 瀏覽:680
路由器和DSN伺服器有什麼區別 瀏覽:549
android伸縮控制項 瀏覽:853
androidm3u8緩存 瀏覽:236
imphp開源知乎 瀏覽:708
清除網路通配符dos命令 瀏覽:839
鴻蒙系統怎麼快速換回安卓 瀏覽:714