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

php截取字元串utf8

發布時間:2022-09-03 18:36:25

㈠ 最准確的php截取字元串長度函數

說是最精確截取長度,其實我也不敢確定是否是最精確的,具體有多精確看下面的效果就知道了:
先上測試用的字元串:
<?php
header("Content-Type:text/html;charset=utf-8");
echo
cn_substr_utf8('我是一個,和哈,哦也,,國家!',12);
echo
'<br
/>',cn_substr_utf8('ai\'2145m
a
ch3我[是一,個,和哈,哦也,,國家!',12);
echo
'<br
/>',cn_substr_utf8('【我,是一,個,和哈,哦也,,國家!',12);
echo
'<br
/>',cn_substr_utf8('我是一,個,和哈,哦也,,國家!',12);
echo
'<br
/>',cn_substr_utf8('我是,一,個,和哈,哦也,,國家!',12);
echo
'<br
/>',cn_substr_utf8('我,是,一,個,和哈,哦也,,國家!',12);
echo
'<br
/>',cn_substr_utf8('我是asd一,個,和哈,哦也,,國家!',12);
echo
'<br
/>',cn_substr_utf8('【我i\'m[是一,個,和哈,哦也,,國家!',12);
echo
'<br
/>',cn_substr_utf8('【i\'m
a
ch我[是一,個,和哈,哦也,,國家!',12);
echo
'<br
/>',cn_substr_utf8('【i\'2145m
a
ch3我[是一,個,和哈,哦也,,國家!',12);
下面是精確截取字元串的效果圖:
具體函數代碼如下:
//utf-8中文截取,單位元組截取模式
function
cn_substr_utf8($str,$length,$append='...',$start=0){
if(strlen($str)<$start+1){
return
'';
}
preg_match_all("/./su",$str,$ar);
$str2='';
$tstr='';
//www.phpernote.com
for($i=0;isset($ar[0][$i]);$i++){
if(strlen($tstr)<$start){
$tstr.=$ar[0][$i];
}else{
if(strlen($str2)<$length
+
strlen($ar[0][$i])){
$str2.=$ar[0][$i];
}else{
break;
}
}
}
return
$str==$str2?$str2:$str2.$append;
}
如果大家認為還不夠准確大家可以在此基礎上進行改進,或者是創新,希望這篇關於php截取字元串長度函數的文章對大家的學習有所幫助。

㈡ php 截取utf-8格式的字元串實例代碼

php
截取utf-8格式的字元串
php中,我們經常需要截取字元串。英文字元佔用一個位元組,中文字元佔用兩個位元組,但中文字元佔用兩個位元組是相對於GBK編碼而言但是在時下國際流行的UTF8編碼中,一個中文字元佔用3個位元組。本文章向大家介紹一個php
截取utf-8格式字元串的函數。
舉例說明:
function
truncate_utf8_string($string,
$length,
$etc
=
'...')
{
$result
=
'';
$string
=
html_entity_decode
(
trim
(
strip_tags
(
$string
)
),
ENT_QUOTES,
'UTF-8'
);
$strlen
=
strlen
(
$string
);
for($i
=
0;
(($i
<
$strlen)
&&
($length
>
0));
$i
++)
{
if
($number
=
strpos
(
str_pad
(
decbin
(
ord
(
substr
(
$string,
$i,
1
)
)
),
8,
'0',
STR_PAD_LEFT
),
'0'
))
{
if
($length
<
1.0)
{
break;
}
$result
.=
substr
(
$string,
$i,
$number
);
$length
-=
1.0;
$i
+=
$number
-
1;
}
else
{
$result
.=
substr
(
$string,
$i,
1
);
$length
-=
0.5;
}
}
$result
=
htmlspecialchars
(
$result,
ENT_QUOTES,
'UTF-8'
);
if
($i
<
$strlen)
{
$result
.=
$etc;
}
return
$result;
}
如果需要截取utf-8格式的字元串,直接調用這個函數即可。
<?php
$str="如果需要截取utf-8格式的字元串,直接調用這個函數即可。";
echo
truncate_utf8_string($str,10);//輸出結果:如果需要截取utf-8格...
?>
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

㈢ PHP如何獲取中文字元串長度 utf8

PHP對中文字元串的處理一直困擾於剛剛接觸PHP開發的新手程序員。下面簡要的剖析一下PHP對中文字元串長度的處理:

PHP自帶的函數如strlen()、mb_strlen()都是通過計算字元串所佔位元組數來統計字元串長度的,一個英文字元佔1位元組。例:

$enStr = 『Hello,China!』;
echo strlen($enStr); // 輸出:12

而中文則不然,做中文網站一般會選擇兩種編碼:gbk/gb2312或是utf-8。utf-8能兼容更多的字元,所以受到很多站長的喜愛。gbk與utf-8對中文的編碼不同,導致中文在gbk與utf-8編碼下所佔位元組也有差異。

gbk編碼下每個中文字元所佔位元組為2,例:

$zhStr = 『您好,中國!』;
echo strlen($zhStr); // 輸出:12

utf-8編碼下每個中文字元所佔位元組為3,例:

$zhStr = 『您好,中國!』;
echo strlen($zhStr); // 輸出:18

那麼如何計算這組中文字元串的長度呢?有人可能會說gbk下獲取中文字元串長度除以2,utf-8編碼下除以3不就行了嗎?但是您要考慮字元串並不老實,99%的情況會以中英混合的情況出現。

這是WordPress中的一段代碼,主要思想就是先用正則將字元串分解為個體單元,然後再計算單元的個數即字元串的長度,代碼如下(只能處理utf-8編碼下的字元串):

$zhStr = 『您好,中國!』;
$str = 『Hello,中國!』;

// 計算中文字元串長度
function utf8_strlen($string = null) {
// 將字元串分解為單元
preg_match_all(「/./us」, $string, $match);
// 返回單元個數
return count($match[0]);
}

echo utf8_strlen($zhStr); // 輸出:6
echo utf8_strlen($str); // 輸出:9

㈣ php 截取UTF-8中文字元串問題

substr()函數可以 分割文字,但要分割的文字如果包括中文字元往往會遇到問題,這時可以用mb_substr()/mb_strcut這個函數,mb_substr() /mb_strcut的用法與substr()相似,只是在mb_substr()/mb_strcut最後要加入多一個參數,以設定字元串的編碼,但是 一般的伺服器都沒打開php_mbstring.dll,需要在php.ini在把php_mbstring.dll打開。
mb_substr是按字來切分字元,而mb_strcut是按位元組來切分字元,但是都不會產生半個字元的現象……

所以,把$str=substr($text,0,$k);替換為 $str=mb_substr($text,0,$k,'UTF-8');就ok了

㈤ 請問下php怎麼處理截取字元串出現的亂碼問題

利用php內置方法mb_substr截取不亂碼;
1、GBK編碼截取示例:
$str
=
'我是誰';
//gbk編碼的字元串
echo
mb_substr($str,
0,
1,
'gbk');
//輸出

mb_substr方法比substr多一個參數,用來指定字元串編碼。
2、utf-8編碼截取示例:
[code]
$str
=
'我abc是誰';
//utf-8編碼的字元串
echo
mb_substr($str,
0,
2,
'utf-8');
//輸出
我a
[/code]
中英混合也完全沒有問題。

㈥ php 怎麼截取漢字字元串

?php 
$str = '這樣一來我的字元串就不會有亂碼^_^'; 
echo "mb_substr:" . mb_substr($str, 0, 7, 'utf-8'); 
//結果:這樣一來我的字 
echo "
"; 
echo "mb_strcut:" . mb_strcut($str, 0, 6, 'utf-8'); 
//結果:這樣 
?
首先
1.確保你的Windows/system32下有php_mbstring.dll這個文件,沒有就從你Php安裝目錄extensions里拷入Windows/system32裡面。
2.在windows目錄下找到php.ini打開編輯,搜索mbstring.dll,找到
;extension=php_mbstring.dll把前面的;號去掉,這樣mb_substr函數就可以生效了
mb_strcut函數功能也可以截取字元串長度,下面實例具體看看區別在哪:
mb_substr();

㈦ PHP 截取UTF8字元串亂碼 --在線急等

/**********************************
* 截取字元串(UTF-8)
*
* @param string $str 原始字元串
* @param $position 開始截取位置
* @param $length 需要截取的偏移量
* @return string 截取的字元串
* $type=1 等於1時末尾加'...'不然不加
*********************************/
function utfSubstr($str, $position, $length,$type=1){
$startPos = strlen($str);
$startByte = 0;
$endPos = strlen($str);
$count = 0;
for($i=0; $i<strlen($str); $i++){
if($count>=$position && $startPos>$i){
$startPos = $i;
$startByte = $count;
}
if(($count-$startByte) >= $length) {
$endPos = $i;
break;
}
$value = ord($str[$i]);
if($value > 127){
$count++;
if($value>=192 && $value<=223) $i++;
elseif($value>=224 && $value<=239) $i = $i + 2;
elseif($value>=240 && $value<=247) $i = $i + 3;
else return self::raiseError("\"$str\" Not a UTF-8 compatible string", 0, __CLASS__, __METHOD__, __FILE__, __LINE__);
}
$count++;

}
if($type==1 && ($endPos-6)>$length){
return substr($str, $startPos, $endPos-$startPos)."...";
}else{
return substr($str, $startPos, $endPos-$startPos);
}

}

㈧ php截取中文字元串

PHP中文
亂碼
的原因及解決方法
原因:1.PHP頁面語言本身的編碼類型不合適,這時候,你直接在腳本中寫的中文肯定是亂碼,不用說資料庫了;
解決方法:選擇'
UTF8
'或者'gb2312',這樣客戶瀏覽器會自動選擇並出現正確的中文顯示。注意:'UTF8'或者'gb2312'都可以正確顯示中文的。
2.資料庫MySQL中的編碼類型不正確。
解決方法:創建資料庫的時候,MySQL
字元集
選擇'UTF8',MySQL
連接校對選擇utf8_general_ci,這樣創建的資料庫用來存儲中文肯定沒有問題,
否則,你的中文首先在MySQL中就是亂碼,更不要期望它會給你在PHP頁面中顯示正確。
3.與平時的腳本編輯環境有關。比如,有些內容是自己用word寫的,有些是用記事本寫的,有些用editplus、ultraplus等
文本編輯器
。有時候就直接在DW中寫中文了,
這樣做不出亂碼才怪呢。
解決方法:盡量用同一種編輯器。如果是拷貝來得既有的內容,建議用ultraplus中的編碼轉換功能把它轉換成utf8或者gb2312。
到底轉換成什麼類型並不重要,關鍵要求你的PHP
WEB應用程序
中的編碼要一致就行。
4.編程訪問
MySQL時,建議添加一行代碼:mysql_query("SET
NAMES
'GBK'");
這是解決方法
我沒看
懂你
貼上來的程序
所以給你一些方法去解決亂碼的問題
希望可以幫得上

㈨ 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中使用substr截取字元串出現中文亂碼問題該怎麼辦

解決辦法主要有兩種:
一、使用mbstring擴展庫的mb_substr()截取就不會出現亂碼了。
可以用mb_substr()/mb_strcut()這個函數,mb_substr()/mb_strcut()的用法與substr()相似,只是在mb_substr()/mb_strcut最後要加入多一個參數,以設定字元串的編碼,
但是一般的伺服器都沒打開php_mbstring.dll,需要在php.ini在把php_mbstring.dll打開。
echo mb_substr("php中文字元encode",0,4,"utf-8");
如果未指定最後一個編碼參數,會是三個位元組為一個中文,這就是utf-8編碼的特點,若加上utf-8字元集說明,所以,是以一個字為單位來截取的。
使用的時候要注意php文件的編碼,和網頁顯示時的編碼。使用這個mb_substr方法要事先知道字元串的編碼,如果不知道編碼,就需要判斷,mbstring庫還提供了mb_check_encoding來檢驗字元串編碼,但還不完善。
PHP 自帶幾種字元串截取函數,其中常用到的就是 substr 和 mb_substr。前者在處理中文時,GBK 為 2 個長度單位,UTF 為 3 個長度單位,後者指定編碼後,一個中文即為 1 個長度單位。
substr 有時會截 1/3 個中文或半個中文,會顯示亂碼,相對來說 mb_substr 更適合我們使用。不過有時候 mb_substr 就顯得不那麼好用了。例如我要顯示一個小圖片的簡要信息,5 個中文正好,超過 5 個就截取前4再加上 」…」,這樣處理中文是沒問題了,可是處理英文或數字,這樣截取就太短了。
二、自己書寫截取函數,但效率不如用mbstring擴展庫來得高。下面是ecshop裡面的截取UTF-8編碼下字元串的函數。

閱讀全文

與php截取字元串utf8相關的資料

熱點內容
網站源碼怎麼傳到文件夾 瀏覽:912
海南壓縮機在哪裡 瀏覽:491
電腦文件夾清晰的文件結構 瀏覽:839
如何把蘋果手機的app轉到安卓 瀏覽:305
java同步並發 瀏覽:249
fw壓縮圖片 瀏覽:258
淘寶申請源碼靠譜嗎 瀏覽:874
androidupdater 瀏覽:635
c2d游戲源碼大全可復製版 瀏覽:771
電腦怎樣重置網關命令 瀏覽:411
winftplinux 瀏覽:335
推特app界面如何設置成中文 瀏覽:452
太空工程師轉子編程屬性 瀏覽:32
windowscmd關機命令 瀏覽:342
雲桌面只要伺服器裝一套軟體 瀏覽:247
電腦右鍵按到什麼導致文件夾全屏 瀏覽:454
我的世界如何製造伺服器主城 瀏覽:365
linuxssh連不上 瀏覽:297
永宏plc用什麼編程電纜 瀏覽:371
win激活命令行 瀏覽:886