當前位置:首頁 » 編程語言 » substrphp中文

substrphp中文

發布時間: 2022-09-04 10:12:46

『壹』 php 截取兩個中文字中間的字元串 怎麼實現

<?php
header('Content-Type:text/html;charset=utf-8');
$str="網路知道提了截取中文字元串的問題";
$t1=mb_strpos($str,'提');
$t2=mb_strpos($str,'串');
echo$s=mb_substr($str,$t1,$t2-$t1);

『貳』 PHP怎麼用substr函數截取字元串中的某部分

語法substr(string,開始截取的位置,截取長度);


示例

$string='ABCDEFGH';
//分別下表是01234567
$string=substr($string,2,3);
echo$string;//輸出CDE

缺點就是不能截取中文,截取中文有時候會亂碼

『叄』 如何解決用substr函數對中文字元串截取時的亂碼

在PHP程序開發中,經常會執行字元串的截取操作,比如輸出信息列表時,標題不宜過長,列印文章摘要時,也要執行一系列的字元串截取操作。遇到這些需求時,我們經常會想到使用substr()方法來實現,substr()對全英文字元串的截取是比較適合的。

但字元串只要出現中文字元,就有可能導致PHP
substr中文亂碼,因為中文UTF-8編碼,每個漢字佔3位元組,而GB2312佔2位元組,英文佔1位元組,截取位數不準確,substr()硬生生地將
一個中文字元「鋸」成兩半,造成斷開的字元會把其後的..拉過來一起做一個字,所以出現了PHP substr中文亂碼。

substr --- 取得部份字元串

語法 : string substr (string string, int start [, int length])

說明 :

substr( )傳回 string的一部份字元串,由參數 start和 length指定。

如果 start是正數,傳回的字元串將會從 string的第 start個字元開始。

Example :

<?php
$rest = substr ("abcdef", 1); // returns "bcdef"
$rest = substr ("abcdef", 1, 3); // returns "bcd"
?>

如果 start是負數,傳回的字元串將會從 string結尾的第 start個字開始。

Example :

<?php
$rest = substr ("abcdef", -1); // returns "f"
$rest = substr ("abcdef", -2); // returns "ef"
$rest = substr ("abcdef", -3, 1); // returns "d"
?>

如果有給予參數 length而且是正數時,傳回的字元串將會從 start傳回 length個字元。
如果有給予參數 length而且是負數時,傳回的字元串將會結束於 string結尾的第 length個字元。

Example :

<?php
$rest = substr ("abcdef", 1, -1); // returns "bcde"
?>

對於英文沒有問題,我們測試一個中文

<?php
$rest = substr ("中國人", 1, -1); // returns "fdsafsda" 就是亂碼了
?>

這種截取字元的結果,肯定不是我們想要的結果,這種出現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打開。

<?php
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編碼下字元串的函數。

function sub_str($str, $length = , $append = true)
{
$str = trim($str);
$strlength = strlen($str);
if ($length == || $length >= $strlength)
{
return $str; //截取長度等於或大於等於本字元串的長度,返回字元串本身
}
elseif ($length < ) //如果截取長度為負數
{
$length = $strlength + $length;//那麼截取長度就等於字元串長度減去截取長度
if ($length < )
{
$length = $strlength;//如果截取長度的絕對值大於字元串本身長度,則截取長度取字元串本身的長度
}
}
if (function_exists('mb_substr'))
{
$newstr = mb_substr($str, , $length, EC_CHARSET);
}
elseif (function_exists('iconv_substr'))
{
$newstr = iconv_substr($str, , $length, EC_CHARSET);
}
else
{
//$newstr = trim_right(substr($str, , $length));
$newstr = substr($str, , $length);
}
if ($append $str != $newstr)
{
$newstr .= '';
}
return $newstr;
}

『肆』 php echo substr('hello',1,-2);-2是什麼意思 為什麼結果是 el

substr是截取字元串,1是從左開始第2個(0開始),-2我理解應該是從字元串尾向左第3個。
截取"hello"從第2個字元開始到從尾左第3個的子字元串。

『伍』 substr() 在php 中是截取的意思,請問這個函數是由哪兩個英文的縮寫組成的 str 應該是 string吧

substring
子串

『陸』 php關於截取中文字元串的問題

1. ord 返回字元的 ASCII 碼值
if (ord(substr($str, $i,1))>0xa0) 說明這個字元屬於中文范疇
2.$tmpstr.=substr($str,$i,2); 截取2個字元,
1和2 加起來就是 判斷字元是不是屬於中文字元 如果屬於則截取兩個字元
由此看出 這個方法只適用於 將中文作為雙位元組編碼 比如GBK gb2312 不適合utf8之類的

可以採用 string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] ) 處理中文截取問題

『柒』 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 怎麼截取漢字字元串

?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中getSubstr()是什麼意思

方法一:
<?phpheader("Content-Type: text/html; charset=utf-8");$str="107sadf網站工作室歡迎您!";echo strlen($str)."<br>";echo substr($str,0,12)."<br>";echo mb_strlen($str,"UTF8")."<br>";echo mb_substr($str,0,12,"UTF8")."<br>";?>

顯示結果如下
34
107sadf網�
16
107sadf網站工作室


strlen()函數返回字元串所佔的位元組長度,一個英文字母、數字、各種符號均佔一個位元組,它們的長度均為1。一個中文字元占兩個位元組,所以一個中文字元的長度是2,對於一個UTF-8的中文字元,會把它當做長度為3來處理。

怎麼准確的計算字元串的長度呢?這里,得引入另外一個函數mb_strlen()。mb_strlen()函數的用法與strlen()幾乎一摸一樣,只是多了一個指定字元集編碼的參數。函數原型為:

  • intmb_strlen(stringstring_input,stringencode);

  • 在mb_strlen計算時,選定內碼為UTF8,則會將一個中文字元當作長度1來計算。


  • mb_substr也同樣的原理

  • 註:mb_strlen與mb_substr並不是PHP的核心函數,使用前需要打開php.ini中的extension=php_mbstring.dll這一項


  • 方法二:



  • <?phpheader("Content-Type: text/html; charset=utf-8");$str="107sadf網站工作室歡迎您!";function chinesesubstr($str,$start,$len){ $strlen = $len - $start; //定義需要截取字元的長度 for($i=0;$i<$strlen;$i++){ //使用循環語句,單字截取,並用$tmpstr.=$substr(?,?,?)加起來 if(ord(substr($str,$i,1))>0xa0){ //ord()函數取得substr()的第一個字元的ASCII碼,如果大於0xa0的話則是中文字元 $tmpstr.=substr($str,$i,3); //設置tmpstr遞加,substr($str,$i,3)的3是指三個字元當一個字元截取(因為utf8編碼的三個字元算一個漢字) $i+=2; }else{ //其他情況(英文)按單字元截取 $tmpstr.=substr($str,$i,1); } } return $tmpstr;}echo chinesesubstr($str,0,12)."<br>";?>


  • 最後結果顯示為:


  • 107sadf網站


熱點內容
數控車床編程加工 發布:2025-01-15 14:31:43 瀏覽:714
怎麼破解iphone5密碼 發布:2025-01-15 14:26:48 瀏覽:434
php數組列印 發布:2025-01-15 14:15:56 瀏覽:621
java流的關閉 發布:2025-01-15 14:15:55 瀏覽:755
東東農場自動腳本 發布:2025-01-15 14:10:05 瀏覽:390
apache禁止訪問文件 發布:2025-01-15 14:01:55 瀏覽:442
速騰哪個配置動力最好 發布:2025-01-15 13:56:44 瀏覽:902
編程做轉盤 發布:2025-01-15 13:56:04 瀏覽:194
安卓輔助腳本如何寫 發布:2025-01-15 13:42:50 瀏覽:127
壓縮褲的穿法 發布:2025-01-15 13:39:24 瀏覽:316