首頁 php教程 php手册 实用技巧:PHP截取中文字符串的问题

实用技巧:PHP截取中文字符串的问题

Jun 21, 2016 am 09:10 AM
start title unset

技巧|问题|中文|字符串

以下代码试用于GB2312编码,截取中文字符串是PHP中一个头疼的问题,解决方法是根据值是否大于等于128来判断是否是双字节字符,以避免出现乱码的情况。但中英文混合、特殊符号等问题总是存在,现在写一个比较全面的,仅供参考:

程序说明:

1. len 参数以中文字符为标准,1len等于2个英文字符,为了形式上好看些

2. 如果将magic参数设为false,则中文和英文同等看待,取绝对的字符数

3. 特别适用于用htmlspecialchars()进行过编码的字符串

4. 能正确处理GB2312中实体字符模式(𖰰)

程序代码:

<ccid_code>function FSubstr($title,$start,$len="",$magic=true) {/**  *  powered by Smartpig  *  mailto:d.einstein@263.net  */  $length = 0;if($len == "") $len = strlen($title);//判断起始为不正确位置if($start > 0){  $cnum = 0;  for($i=0;$i= 128) $cnum ++;  }  if($cnum%2 != 0) $start--;    unset($cnum);}if(strlen($title)?) if(substr($title,$i,4)="=" ?) ?&?) if($cur="=" $cur="substr($title,$i,1);">=128)   {    $cstep = 2;    $length += 2;    $i += 1;    $realnum ++;    if($magic)    {     $blen ++;     $ctype = 1;    }   }else{    $cstep = 1;    $length +=1;    $realnum ++;    if($magic)    {     $alen++;    }   }  }    if($magic)  {   if(($blen*2+$alen) == ($len*2)) break;   if(($blen*2+$alen) == ($len*2+1))   {    if($ctype == 1)    {     $length -= $cstep;     break;    }else{     break;    }   }  }else{   if($realnum == $len) break;  }}unset($cur);unset($alen);unset($blen);unset($realnum);unset($ctype);unset($cstep);return substr($title,$start,$length);}</ccid_code>
登入後複製



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

docker start起不來怎麼辦 docker start起不來怎麼辦 Oct 21, 2022 pm 03:43 PM

docker start起不來的解決方法:1、檢查運作狀態,然後透過「echo 3 &gt; /proc/sys/vm/drop_caches」指令釋放被佔用的記憶體;2、透過「$netstat -nltp|grep .. .”指令檢查連接埠是否已被佔用,如果上線後發現佔有,則改為可用埠再重啟即可。

title是什麼意思 title是什麼意思 Aug 04, 2023 am 11:18 AM

title是定義網頁標題的意思,位於標籤內,並且是在瀏覽器的標題欄中顯示的文本,title對於網頁的搜尋引擎優化和用戶體驗都非​​常重要。在編寫HTML網頁時,應該注意使用相關的關鍵字和吸引人的描述來定義title元素,以便吸引更多的使用者點擊和瀏覽。

node start 報錯怎麼辦 node start 報錯怎麼辦 Dec 29, 2022 pm 01:55 PM

node start報錯的解決方法:1、直接在終端機執行「node xx.js」;2、新增start啟動項目「 "scripts": {"test": "echo \"Error: no test specified\" && exit 1 ","start":"node service.js"}」;3、重新執行「npm start」即可。

HTML中title的意思是什麼 HTML中title的意思是什麼 Mar 06, 2024 am 09:53 AM

HTML中的title顯示的是網頁標題標籤,可以讓瀏覽者知道目前頁面的主要是說什麼的,所以每個網頁都應該有一個單獨的title。

java線程中start和run的差別是什麼 java線程中start和run的差別是什麼 Apr 20, 2023 pm 12:37 PM

publicclassTest1extendsThread{@Overridepublicvoidrun(){while(true){System.out.println(Thread.currentThread().getName());}}publicstaticvoidmain(String[]args){Test1test1=newTest1()}publicstaticvoidmain(String[]args){Test1test1=newTest1(); ;//輸出結果maintest1.start();//輸出結果Thread-0}}1.startstart作用是啟動一個

Java執行緒中的start方法和run方法怎麼使用 Java執行緒中的start方法和run方法怎麼使用 Apr 20, 2023 am 08:58 AM

start方法和run方法$start()$方法用來啟動一個線程,這時此線程處於就緒(可運行)狀態,並沒有運行,一旦得到$cpu$時間片,就開始執行$run()$方法。而直接呼叫$run()$方法,只是呼叫了一個類別裡的方法,其本質上還是在當前執行緒中執行的,因此只有使用$start()$方法來呼叫$run()$方法才能實現真正的多線程。範例程式碼@Slf4j(topic="c.Test4")publicclassTest4{publicstaticvoidmain(Strin

PHP中如何使用unset函數刪除數組元素 PHP中如何使用unset函數刪除數組元素 Jun 26, 2023 am 11:29 AM

PHP是一種流行的伺服器端程式語言,它提供了許多有用的功能,其中之一就是操作陣列。使用PHP陣列時,有時候需要刪除元素,這時候就可以使用unset()函數。 unset()函數是PHP中用來刪除變數的函數,可以用來刪除陣列中的元素。它的語法如下:unset(array$array[,mixed$key1[,mixed$key2[,mixed

如何使用PHP中的session_start函數開啟會話 如何使用PHP中的session_start函數開啟會話 Jun 26, 2023 pm 01:33 PM

session_start()函數是PHP中開啟會話的函數之一。會話是Web開發中很常見的技術,而會話的基礎就是在使用者造訪網站時給使用者一個唯一的會話ID,並在後續的訪問中使用這個會話ID來識別使用者。會話可用於保存使用者的登入狀態、購物車內容和使用者的其他信息,同時也可用於在網站中實現一些功能的權限控制。在PHP中開啟會話的方式非常簡單,只需使用sess

See all articles