截取中文字元串php
❶ 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函數截取中文字元會出現亂碼。
只有使用自寫函數來截取包含中文的字元串,函數如下:
$string為字元串。
$length為要截取的長度。
function wordscut($string,$length) {
if(strlen($string) > $length) {
for($i = 0; $i < $length - 3; $i++) {
if(ord($string[$i]) > 127) {
$wordscut .= $string[$i].$string[$i + 1];
$i++;
} else {
$wordscut .= $string[$i];
}
}
return $wordscut."...";
}
return $string;
}
❸ php截取指定中文字元串
$str = "冒號之前的內容 天氣預報: 冒號之後的內容";
$arr=explode("天氣預報:",$str);
$result=$arr[1];
❹ 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來截取一段中文字元串而不出現亂碼
/*
功能:截取全形和半形混合的字元串以避免亂碼
參數:
$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指定截取字元串中的中英文或數字字元的實例分享
我們在開發過程中,經常會碰到截取中文英文數字等的問題,大家知道中文所佔的字元和英文數字是不同的;然後我們就會在項目的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關於截取中文字元串的問題
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截取字元串
這個問題我回答了好幾個了:
/* 截取一定長度的完整的中文字元 */
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中如何截取中文字元串
如果是UTF-8字元編碼的,應該是每個中文字元佔三個字元位,
比如$a = "還好吧";
substr($a, 3, 3);//輸出「好」,
注意$a賦值的時候要麼都是中文字元(包括標點),如果有英文字元標點會影響