導航:首頁 > 編程語言 > php中文截取無亂碼

php中文截取無亂碼

發布時間:2023-04-29 00:21:36

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]如何在PHP中截取中文字串無亂碼

一年前寫的一個函數。用法與substr一樣,支持中文。您也可以加以改進。
//截取字元串含數,對系統函數的改進,不會將中文變亂。
function mysubstr ($str,$start,$len=0,$cutchar="…") {
$str=str_replace("",' ',$str);
$str=str_replace("“",'「',$str);
$str=str_replace("”",'」',$str);
$str=str_replace("—",'—',$str);
$str=str_replace(""",'"',$str);
$str=str_replace(''',"'",$str);
$str=str_replace("<",'<',$str);
$str=str_replace(">",'>',$str);
$str=str_replace("&",'&',$str);
$str=preg_replace("/[\s]+/"," ",$str);
$tolen=strlen($str);
if(!($start==0 && $len>=$tolen)){
/友棚/為方便操作,先將起始值和長度值轉換為正數
if($start<0)$start=$tolen+$start;if($start<0)$start=0;if($start>$tolen)return "";
if($len<=0)$len=($tolen+$len)-$start;if($len<1)return "";
if($len>$tolen)$len=$tolen;
for($i=0;$i<$start;$i++){
if(ord(substr($str,$i,1))>127){$i++;}
}
$start=$i; //起始位置計算完成
for($k=0;$k<$len;$k++,$i++){
if(ord(substr($str,$i,1))>127){$i++;$k++;}
}
$len=$k; //長度計算完成
$str=substr($str,$start,$len);
if($start>0){$str=$cutchar.$str;}
if($start+$len<$tolen){$str.=$cutchar;}
}
$str=str_replace("&",'&'返告早,$str);
$str=str_replace('"','"',$str);
$str=str_replace("'",''',$str);
$str=str_replace("<",'<',$str);
$str=str_replace(">",'漏雀>',$str);
return $str;
}

Ⅲ 請問下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 smarty里怎麼截取中文字元串不亂碼

1、如果你用過smarty模板引擎、MVC類似框架如tp,那麼你自己寫一個框架噢!
2、你要對php的繼承實現以及其中的小知識點熟知;
3、先列出你的框架目錄,什麼地方放什麼,然後寫你的配置文件
4、用到的高頻函數有:require 、豎燃譽 require_once 、 file_exites等!
如段鉛:sybase_connect連上資料庫。
語法: int sybase_connect(string [servername], string [username], string [password]);
返回值: 整數函數種類: 資料庫功能 本函數用來打開與 Sybase 資料庫的連接。
參數 servername 為欲連上的資料庫伺服器名稱。
參數 username 及 password 可省略,分別為連接使用的帳號及密碼。
使用本函數需注意早點關閉資料庫,以減余段少系統的負擔。
連接成功則返回資料庫的連接代號,失敗返回 false 值。

Ⅳ 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來截取一段中文字元串而不出現亂碼

/*
功能:截取全形和半形混合的字元串以避免亂碼
參數:
$str_cut 需要截斷的字元串
$length允許字元串顯示的最大長度

*/

functionsubstr_cut($str_cut,$length=30){

if(strlen($str_cut)>;$length){
for($i=0;$i<$length;$i++)
if(ord($str_cut[$i])>;128) $i++;
$str_cut=substr($str_cut,0,$i)."...";
}
return$str_cut;
}

說明:
程序的關鍵語句是:

for($i=0;$i<$length;$i++)
if(ord($str_cut[$i])>;128) $i++;

$str_cut=substr($str_cut,0,$i)."...";
如果字元的ASCII碼大於128,說明當前字元和下一個字元是屬於一個漢字的。
則,$i++跳過對下一個字元的判斷。
再結合循環中的$i++,實際上,當遇到一個漢字時,$i就會加2,從而正確的跳過漢字。
最終實現的效果是,$i變數指向的要麼是半形的字元,要麼是全形漢字的首字元,不會指向
全形漢字的第二個字元,所以,當$i>;=$length時,循環結束,使用
$str_cut=substr($str_cut,0,$i)."...";截取字元時自然也就不會出現亂碼了。


本人在寫一個程序時需要利用PHP從一段字元串中截取指定長度的一段字元下來。以前在寫ASP的時候,參考動網的程序寫過類似的程序,不過,還沒用PHP寫過。

想偷懶,看有不有現成的代碼可以用。於是,在GOOGLE中輸入:PHP截斷字元後查找到一段代碼。

Ⅶ PHP中使用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 如何實現中文無亂碼截取用哪個函數

中文截取:mb_substr()

mb_substr( $str, $start, $length, $encoding )

$str,需要截斷的字元蔽信串
$start,截斷開始處拿氏,起始處為宏敏輪0
$length,要截取的字數
$encoding,網頁編碼,如utf-8,GB2312,GBK

Ⅸ PHP中使用substr截取字元串出現中文亂碼問題該怎麼辦

1、按位置截取中文字元串就是mb_substr($string,$start[,$length][,encode]);防止中文截取時出現亂碼

2、注意:用到mb_開頭的函數時候,這些函數依賴於php的php_mbstring.dll擴展文件,文件在php.ini中

閱讀全文

與php中文截取無亂碼相關的資料

熱點內容
單片機的反向編譯 瀏覽:463
subsample演算法 瀏覽:899
蘋果免費看書app哪個最好 瀏覽:885
c語言加密怎麼弄 瀏覽:840
c語言編譯的錯誤提示 瀏覽:767
驗機蘋果app哪個最好 瀏覽:666
光遇國際服安卓如何購買禮包 瀏覽:55
163app怎麼下載 瀏覽:245
電腦程序員下場 瀏覽:45
編譯原理ll1文法判斷 瀏覽:727
qt用vs2015編譯 瀏覽:551
結婚日子最好的演算法 瀏覽:794
安卓怎麼把數據傳到蘋果里 瀏覽:504
編譯器標識 瀏覽:790
編程珠璣第三章 瀏覽:785
windows如何開啟tftp伺服器 瀏覽:110
歐姆龍plc編程指令表 瀏覽:189
程序員遠程收入不穩定 瀏覽:861
演算法原理怎麼寫 瀏覽:470
有個動漫女主藍頭發是程序員 瀏覽:1001