當前位置:首頁 » 編程語言 » php編碼函數

php編碼函數

發布時間: 2022-04-22 04:06:06

php 幾個位元組 函數

有兩個函數可以取PHP字元串長度
----------------------------------------------------------------------
strlen — 獲取字元串長度

int strlen ( string $string )

返回給定的字元串 string 的長度。參數 string 需要計算長度的字元串。

返回值 成功則返回字元串 string 的長度;如果 string 為空,則返回 0。

----------------------------------------------------------------------
mb_strlen — 獲取字元串的長度 (PHP 4 >= 4.0.6, PHP 5)

mixed mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] )
獲取一個 string 的長度。

參數 str 要檢查長度的字元串。
encoding 參數為字元編碼。如果省略,則使用內部字元編碼。

返回值
返回具有 encoding 編碼的字元串 str 包含的字元數。 多位元組的字元被計為 1。
如果給定的 encoding 無效則返回 FALSE。

特別要注意的是:

有關中文的問題。PHP內置的字元串長度函數strlen無法正確處理中文字元串,它得到的只是字元串所佔的位元組數。對於GB2312的中文編碼,strlen得到的值是漢字個數的2倍,而對於UTF-8編碼的中文,就是3倍的差異了(在UTF-8編碼下,一個漢字佔3個位元組)。

採用mb_strlen函數可以較好地解決這個問題。mb_strlen的用法和strlen類似,只不過它有第二個可選參數用於指定字元編碼。例如得到UTF-8的字元串$str長度,可以用mb_strlen($str,'UTF-8')。如果省略第二個參數,則會使用PHP的內部編碼。內部編碼可以通過mb_internal_encoding()函數得到。需要注意的是,mb_strlen並不是PHP核心函數,使用前需要確保在php.ini中載入了php_mbstring.dll,即確保「extension=php_mbstring.dll」這一行存在並且沒有被注釋掉,否則會出現未定義函數的問題。

Ⅱ PHP有沒有判斷一個文件或者一段字元串是什麼編碼的函數

測試:將 text1.txt 保存成 ASCII編碼, text2.txt 保存成 UTF-8 編碼

<?php
function chkCode($string){
$code = array('ASCII', 'GBK', 'UTF-8');
foreach($code as $c){
if( $string === iconv('UTF-8', $c, iconv($c, 'UTF-8', $string))){
return $c;
}
}
return null;
}

$file = 'text1.txt';
echo chkCode(file_get_contents($file)); // 輸出ASCII
echo '<br />';

$file = 'text2.txt';
echo chkCode(file_get_contents($file)); // 輸出UTF-8
echo '<br />';
?>

Ⅲ php中編碼轉換問題

function uc2html($str) {
$ret = ' ';
for( $i=0; $i <strlen($str)/2; $i++ ) {
$charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
$ret .= iconv( "utf-8 ", "gb2312 ",u2utf8($charcode));
}
return $ret;
}

function u2utf8($c) {
$str= " ";
if ($c < 0x80) {
$str.=$c;
} else if ($c < 0x800) {
$str.=chr(0xC0 | $c> > 6);
$str.=chr(0x80 | $c & 0x3F);
} else if ($c < 0x10000) {
$str.=chr(0xE0 | $c> > 12);
$str.=chr(0x80 | $c> > 6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
} else if ($c < 0x200000) {
$str.=chr(0xF0 | $c> > 18);
$str.=chr(0x80 | $c> > 12 & 0x3F);
$str.=chr(0x80 | $c> > 6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
}
return $str;
}
如果你不是smarty的話 試試這個 如果是smarty的話 用下面的方法
<?php

/*
@Author: 蝸牛
@Blog: http://www.00562.com

@Note: 這個解決辦法是基於上面那個地址提到的方法,解決了中英文截取長度時出現亂碼的問題
*/

function smarty_modifier_truncate($string, $sublen = 80, $etc = '...', $break_words = false, $middle = false)
{
$start=0;
$code="UTF-8";
if($code == 'UTF-8')
{
//如果有中文則減去中文的個數
$cncount=cncount($string);
if($cncount>($sublen/2))
{
$sublen=ceil($sublen/2);
}
else
{
$sublen=$sublen-$cncount;
}

$pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
preg_match_all($pa, $string, $t_string);

if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
return join('', array_slice($t_string[0], $start, $sublen));
}
else
{
$start = $start*2;
$sublen = $sublen*2;
$strlen = strlen($string);
$tmpstr = '';

for($i=0; $i<$strlen; $i++)
{
if($i>=$start && $i<($start+$sublen))
{
if(ord(substr($string, $i, 1))>129)
{
$tmpstr.= substr($string, $i, 2);
}
else
{
$tmpstr.= substr($string, $i, 1);
}
}
if(ord(substr($string, $i, 1))>129) $i++;
}
if(strlen($tmpstr)<$strlen ) $tmpstr.= "...";
return $tmpstr;
}

}

function cncount($str)
{
$len=strlen($str);
$cncount=0;

for($i=0;$i<$len;$i++)
{
$temp_str=substr($str,$i,1);

if(ord($temp_str) > 127)
{
$cncount++;
}
}

return ceil($cncount/3);
}

?>
是可以的以上兩種方法 site:www.00562.com

Ⅳ php的json_encode函數如何編碼數組中的數組

你圖里的files是一維數組,你加多一個array 變成二維 不就行了

"files"=>array(
array("name"=>"xxxxxx","content"=>"xxxxxxx"),

)

Ⅳ PHP函數urlencode和urldecode的問題。

很明顯,這個編碼函數有另外一個參數。就是指定編碼方式的。
如果你安裝utf-8編碼進行編碼的話,就和原來的不一樣。
當你換成gb2312的時候就一樣了。
因為選擇的默認編碼方式不同,所以會出現不同的結果。

Ⅵ php 里 mb_convert_encoding()函數,

不過英文一般不會存在編碼問題,只有中文數據才會有這個問題。比如你用Zend Studio或Editplus寫程序時,用的是gbk編碼,如果數據需要入資料庫,而資料庫的編碼為utf8時,這時就要把數據進行編碼轉換,不然進到資料庫就會變成亂碼。

mb_convert_encoding的用法見官方:
http://cn.php.net/manual/zh/function.mb-convert-encoding.php

做一個GBK To UTF-8

復制代碼代碼如下:

<?php
header("content-Type: text/html; charset=Utf-8");
echo mb_convert_encoding("你系我的友仔", "UTF-8", "GBK");
?>

再來個GB2312 To Big5

復制代碼代碼如下:

<?php
header("content-Type: text/html; charset=big5");
echo mb_convert_encoding("你是我的朋友", "big5", "GB2312");
?>

不過要使用上面的函數需要安裝但是需要先enable mbstring 擴展庫。

PHP中的另外一個函數iconv也是用來轉換字元串編碼的,與上函數功能相似。

下面還有一些詳細的例子:
iconv — Convert string to requested character encoding
(PHP 4 >= 4.0.5, PHP 5)
mb_convert_encoding — Convert character encoding
(PHP 4 >= 4.0.6, PHP 5)

用法:
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )
需要先enable mbstring 擴展庫,在 php.ini里將; extension=php_mbstring.dll 前面的 ; 去掉
mb_convert_encoding 可以指定多種輸入編碼,它會根據內容自動識別,但是執行效率比iconv差太多;

string iconv ( string in_charset, string out_charset, string str )
注意:第二個參數,除了可以指定要轉化到的編碼以外,還可以增加兩個後綴://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 會自動將不能直接轉化的字元變成一個或多個近似的字元,//IGNORE 會忽略掉不能轉化的字元,而默認效果是從第一個非法字元截斷。
Returns the converted string or FALSE on failure.

使用:

發現iconv在轉換字元」—」到gb2312時會出錯,如果沒有ignore參數,所有該字元後面的字元串都無法被保存。不管怎麼樣,這個」—」都無法轉換成功,無法輸出。 另外mb_convert_encoding沒有這個bug.

一般情況下用 iconv,只有當遇到無法確定原編碼是何種編碼,或者iconv轉化後無法正常顯示時才用mb_convert_encoding 函數.

from_encoding is specified by character code name before conversion. it can be array or string - comma separated enumerated list. If it is not specified, the internal encoding will be used.
/* Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */
$str = mb_convert_encoding($str, 「UCS-2LE」, 「JIS, eucjp-win, sjis-win」);
/* 「auto」 is expanded to 「ASCII,JIS,UTF-8,EUC-JP,SJIS」 */
$str = mb_convert_encoding($str, 「EUC-JP」, 「auto」);

例子:

復制代碼代碼如下:

$content = iconv("GBK", "UTF-8", $content);
$content = mb_convert_encoding($content, "UTF-8","GBK");

PHP中使用mb_convert_encoding轉碼的小陷阱
在php程序中使用mb_convert_encoding()方法進行字元編碼轉換大家都很熟悉了,平時也在大量的使用。而且在一般情況下該方法也表現的足夠好,值得表揚。但在一個項目中我們需要使用它進行UTF8到GBK的轉換,在轉換一些特殊字元時發現了一個不大不小的問題。具體表現為mb把在utf8可編碼的字元而在gbk中不可編碼的字元都轉成了\0x00\0x80,這樣就導致轉換後的gbk字元是有問題的。
在我們的意識中,在進行字元編碼轉換的過程中,如果遇到目標編碼不可表現的字元,轉碼程序應該做的是舍棄這種字元,這樣雖然丟失了部分數據,但不會導致轉碼的字元序列不可用。不清楚mb為什麼要使用上述方式而不是舍棄方式。
臨時的解決方式是對轉碼後的字元串序列進行過濾,過濾掉所有\x00\80的字元;又或者在轉義之前對utf8的字元串進行過濾,過濾掉ut8可表示而gbk不可表示的所有字元,從實現難度上來講,第一種過濾方式比較容易做到。

Ⅶ php中把字元串編碼用哪個函數成百度中地址欄中字元形式

一般中文編碼為gb2312,gbk,gb18030都可以,有這些%C9%CF%BA%A3+%CC%EC%C6%F8&f=8&wd=%B1%B1%BE%A9是因為,他採用method為get方法,地址欄可以顯示傳遞參數,wd好像是word,關鍵詞,等號後的為北京的十六進制編碼,當你的method=post的話,在址址欄不顯示這些東西

Ⅷ php怎樣判斷字元串是什麼編碼

php判斷字元編碼的二個方法:
一個是用php自帶的函數mb_detect_encoding,一個是個人寫函數來處理。
方法1,使用mb_detect_encoding函數。
?

1
2
3
4

<?php
$str=」<a href="http://www..com/" target="_blank" class="infotextkey">腳本</a>」;
echo mb_detect_encoding($str);
?>

方法2,自定義函數。
?

1
2
3
4
5
6
7
8
9
10
11

<?php
function chkbm($string){
$bm = array(『ASCII』, 『GBK』, 『UTF-8′);
foreach($bm as $c){
if( $string === <a href="http://www..com/" target="_blank" class="infotextkey">iconv</a>(『UTF-8′, $c, iconv($c, 『UTF-8′, $string))){//轉換編碼後是不是相等
return $c;
}
}
return null;
}
?>

Ⅸ php中如何轉換變數的編碼

functionunicode2utf8($str){
if(!$str)return$str;
$decode=json_decode($str);
if($decode)return$decode;
$str='["'.$str.'"]';
$decode=json_decode($str);
if(count($decode)==1){
return$decode[0];
}
return$str;
}

這是unicode編碼,使用這個函數可以很好的將unicode編碼轉為utf-8編碼。詳細的原理可以參考這篇博文《php將unicode編碼轉為utf-8方法》:http://www.welefen.com/php-unicode-to-utf8.html

Ⅹ php提供了什麼函數來對url進行編碼

urlencode
:本函數將字元串以
URL
編碼;
urldecode
:還原編碼的字元串
語法:
string
urlencode(string
str);
韓順平
老師的php入門到精通視頻裡面講的有

熱點內容
落櫻小屋哪裡下載安卓 發布:2025-01-27 12:35:13 瀏覽:71
微信伺服器IP跳轉 發布:2025-01-27 12:26:54 瀏覽:73
oracle自動備份腳本linux 發布:2025-01-27 12:21:40 瀏覽:936
pop伺服器密碼怎麼填 發布:2025-01-27 12:20:02 瀏覽:968
oraclesqlnumber 發布:2025-01-27 12:04:22 瀏覽:849
如何看三才配置數理暗示力 發布:2025-01-27 12:04:15 瀏覽:811
我的世界離線2b2t的伺服器 發布:2025-01-27 11:51:25 瀏覽:144
網站被異常篡改訪問有風險 發布:2025-01-27 11:50:01 瀏覽:431
光遇國際服腳本全部圖 發布:2025-01-27 11:47:40 瀏覽:139
ios資源加密 發布:2025-01-27 11:36:33 瀏覽:816