⑴ php 查找中文字元串
在PHP中查找中文字元,有兩種方案:
將PHP保存為與欲查找中文一樣的編碼,然後使用strpos查找。
將PHP保存為UTF-8無BOM編碼,然後轉換字元串編碼為UTF-8,再用strpos查找。
第一種方法:
strpos($curl_res,'中文');
第二種方法:
$str=mb_convert_encoding($str,'utf-8','gbk');
mb_strpos($str,'中文');
主意:函數中的中文字元串參數的編碼,必須要和PHP文件保存格式的編碼一致。
⑵ PHP如何獲取一個字元串的UTF-8編碼
foreach(unpack(
'n*',
mb_convert_encoding('你好', 'unicode', 'gbk')
) as $i) {
echo '\u',dechex($i);
}
另,你這里的「\u60a8\u597d」其實是unicode編碼,而不是utf-8編碼
⑶ php如何獲取中文字元長度,一個中文字元算一個
在PHP中專門的mb_substr和mb_strlen函數,可以對中文進行截取和計算長度,但是,由於這些函數並非PHP的核心函數,所以,它們常常有可能沒有開啟。要在php.ini中開啟即可。獲取長度實例:1 ,utf-8環境下使用
header('Content-type:text/html;charset=utf-8');
/**
*可以統計中文字元串長度的函數
*@param$str要計算長度的字元串
*@param$type計算長度類型,0(默認)表示一個中文算一個字元,1表示一個中文算兩個字元
*
*/
functionabslength($str)
{
if(empty($str)){
return0;
}
if(function_exists('mb_strlen')){
returnmb_strlen($str,'utf-8');
}
else{
preg_match_all("/./u",$str,$ar);
returncount($ar[0]);
}
}
$str='我們都是中國人啊,ye!';
$len=abslength($str);
var_mp($len);//return12
$len=abslength($str,'1');
echo'<br/>'.$len;//return22
/*
utf-8編碼下截取中文字元串,參數可以參照substr函數
@param$str要進行截取的字元串
@param$start要進行截取的開始位置,負數為反向截取
@param$end要進行截取的長度
*/
functionutf8_substr($str,$start=0){
if(empty($str)){
returnfalse;
}
if(function_exists('mb_substr')){
if(func_num_args()>=3){
$end=func_get_arg(2);
returnmb_substr($str,$start,$end,'utf-8');
}
else{
mb_internal_encoding("UTF-8");
returnmb_substr($str,$start);
}
}
else{
$null="";
preg_match_all("/./u",$str,$ar);
if(func_num_args()>=3){
$end=func_get_arg(2);
returnjoin($null,array_slice($ar[0],$start,$end));
}
else{
returnjoin($null,array_slice($ar[0],$start));
}
}
}
$str2='wo要截取zhongwen';
echo'<br/>';
echoutf8_substr($str2,0,-4);//returnwo要截取zhon
2,支持gb2312,gbk,utf-8,big5 中文截取方法
/*
* 中文截取,支持gb2312,gbk,utf-8,big5
*
* @param string $str 要截取的字串
* @param int $start 截取起始位置
* @param int $length 截取長度
* @param string $charset utf-8|gb2312|gbk|big5 編碼
* @param $suffix 是否加尾綴
*/
public function csubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
{
if(function_exists("mb_substr"))
{
if(mb_strlen($str, $charset) <= $length) return $str;
$slice = mb_substr($str, $start, $length, $charset);
}
else
{
$re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
$re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
$re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
$re['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
preg_match_all($re[$charset], $str, $match);
if(count($match[0]) <= $length) return $str;
$slice = join("",array_slice($match[0], $start, $length));
}
if($suffix) return $slice."…";
return $slice;
}
⑷ PHP mb_convert_encoding 獲取字元串編碼類型實現代碼
後來又在手冊上找到了is_utf8函數,這樣,再結合iconv函數,我的問題就解決了。下面帖出這個函數:
復制代碼
代碼如下:
function
is_utf8($string)
{
return
preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E]
#
ASCII
|
[\xC2-\xDF][\x80-\xBF]
#
non-overlong
2-byte
|
\xE0[\xA0-\xBF][\x80-\xBF]
#
excluding
overlongs
|
[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}
#
straight
3-byte
|
\xED[\x80-\x9F][\x80-\xBF]
#
excluding
surrogates
|
\xF0[\x90-\xBF][\x80-\xBF]{2}
#
planes
1-3
|
[\xF1-\xF3][\x80-\xBF]{3}
#
planes
4-15
|
\xF4[\x80-\x8F][\x80-\xBF]{2}
#
plane
16
)*$%xs',
$string);
}
//
function
is_utf8
如果想深入研究,建議看下PHP手冊上的「Multibyte
String
Functions」這一部分的內容。
⑸ 請問下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
echo substr(需要截取字元串, 起止數, 需要截取的長度);
?>
截取字元串只支持英文。如果字元串包含中文。或混排。以及文字 編碼。gb2312 和 utf8 。截取方式就不一樣了。
推薦使用 bugfree 的截取字元串函數
例子:/**
* @package BugFree
* @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
*
*
* Return part of a string(Enhance the function substr())
*
* @author Chunsheng Wang <[email protected]>
* @param string $String the string to cut.
* @param int $Length the length of returned string.
* @param booble $Append whether append "...": false|true
* @return string the cutted string.
*/
function sysSubStr($String,$Length,$Append = false)
{
if (strlen($String) < = $Length )
{
return $String;
}
else
{
$I = 0;
while ($I < $Length)
{
$StringTMP = substr($String,$I,1);
if ( ord($StringTMP) >=224 )
{
$StringTMP = substr($String,$I,3);
$I = $I + 3;
}
elseif( ord($StringTMP) >=192 )
{
$StringTMP = substr($String,$I,2);
$I = $I + 2;
}
else
{
$I = $I + 1;
}
$StringLast[] = $StringTMP;
}
$StringLast = implode("",$StringLast);
if($Append)
{
$StringLast .= "...";
}
return $StringLast;
}
}
$String = "CodeBit.cn -- 簡單、精彩、通用";
$Length = "18";
$Append = false;
echo sysSubStr($String,$Length,$Append);
?>
⑺ PHP怎麼獲取字元串長度
PHP對中文字元串的處理一直困擾於剛剛接觸PHP開發的新手程序員。下面簡要的剖析一下PHP對中文字元串長度的處理:
(1)PHP自帶的函數如strlen()、mb_strlen()都是通過計算字元串所佔位元組數來統計字元串長度的,一個英文字元佔1位元組;
(2)中文則不然,做中文網站一般會選擇兩種編碼:gbk/gb2312或是utf-8。utf-8能兼容更多的字元,所以受到很多站長的喜愛。gbk與utf-8對中文的編碼不同,導致中文在gbk與utf-8編碼下所佔位元組也有差異。
⑻ php有沒有查看當前的編碼方式的方法
編碼問題是解碼者決定的,數據本身並不指明編碼方式,而是讀數據的解碼者選擇自己的解碼方式
此處,php程序是數據本身,php解釋器是解碼者本身,
php解釋器對php程序的編碼方式並不應人類對php程序的編碼方式理解不同而轉移
因此,理論上不存在獲取當前數據編碼方式的首高梁介面,只要當時的編碼者(譬如人類)顯示指明編碼方式,
解者運碼者(譬如php解釋器)方可獲知
即使在解析以後再人類看來是一片亂碼,PHP認為一切都是正確的.
當然從前端獲取來的字元例外
如果不清楚字元串的編碼格式的話,就可以將這段字元這樣檢查:
$encode=mb_detect_encoding($string,array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′));
echo$encode;
這樣就能知道它是念粗什麼編碼的了。後續操作還可以為其轉碼:
if($encode==「UTF-8″){
$string=iconv("UTF-8″,"GBK",$string);
}
⑼ PHP判斷文件編碼(XML文件中帶CDATA)UTF-8判斷成GBK怎麼解決
設置PHP文件編碼: header("Content-type: text/html; charset=utf-8");
如果你要設置成GBK,這樣寫header("Content-type: text/html; charset=GBK");
PHP字元串轉碼:
(1)$encode = mb_detect_encoding($str, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5')); //獲取字元串編碼格式
(2)$str_encode = mb_convert_encoding($str, 'GBK', $encode);//將字元串轉換成GBK編碼
希望對你有幫助
⑽ php如何判斷一個字元串是不是base64編碼
參考思路:PHP判斷一個字元串是否經過base64編碼,可以通過對該字元串解碼,然後編碼,最後對比兩者是否相等。示例代碼如下:
<?php
header("Content-type:text/html;charset=utf-8;");
$str="Y2hpbmF3aW54cA==";
$re=is_base64($str);
if($re){
echo"該字元串是base64編碼";
}else{
echo"該字元串鬧侍鏈未經過base64編碼";
}
//判斷液孫字元串是否經過編碼方法
function談蘆is_base64($str){
if($str==base64_encode(base64_decode($str))){
returntrue;
}else{
returnfalse;
}
}
?>