『壹』 php讀取txt文本輸出時亂碼如何解決
$text = file_get_contents($filePath);
//$encodType = mb_detect_encoding($text);
define('UTF32_BIG_ENDIAN_BOM', chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));
define('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));
define('UTF16_BIG_ENDIAN_BOM', chr(0xFE) . chr(0xFF));
define('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));
define('UTF8_BOM', chr(0xEF) . chr(0xBB) . chr(0xBF));
$first2 = substr($text, 0, 2);
$first3 = substr($text, 0, 3);
$first4 = substr($text, 0, 3);
$encodType = "";
if ($first3 == UTF8_BOM)
$encodType = 'UTF-8 BOM';
else if ($first4 == UTF32_BIG_ENDIAN_BOM)
$encodType = 'UTF-32BE';
else if ($first4 == UTF32_LITTLE_ENDIAN_BOM)
$encodType = 'UTF-32LE';
else if ($first2 == UTF16_BIG_ENDIAN_BOM)
$encodType = 'UTF-16BE';
else if ($first2 == UTF16_LITTLE_ENDIAN_BOM)
$encodType = 'UTF-16LE';
//下面的判斷主要還是判斷ANSI編碼的·
if ($encodType == '') {//即默認創建的txt文本-ANSI編碼的
$content = iconv("GBK", "UTF-8", $text);
} else if ($encodType == 'UTF-8 BOM') {//本來就是UTF-8不用轉換
$content = $text;
} else {//其他的格式都轉化為UTF-8就可以了
$content = iconv($encodType, "UTF-8", $text);
}
『貳』 PHP無法讀取顯示TXT中的某些漢字,並且編碼轉換的過程中會丟失一部分數據
iconv是很容易出錯的,$str=iconv("gb2312","utf-8",$str);
最好是改成
$str=iconv("gb2312","utf-8//IGNORE",$str);
這個可以減少轉換編碼帶來的錯誤。
『叄』 php 怎麼修改txt文本
PHP有兩種方法讀寫文件,方法一、file、file_get_contents、file_put_contents三個函數整體讀寫文本,適合文本文件不太大的情況。兩個函數的的典型應用是:
$text=file_get_contents('a.txt');//把文本文件的所有內容取到字元串變數$text裡面
$arr=file('a.txt');//把文本文件的所有內容,取到數組$arr裡面,$arr[0]就是第一行,以此類推
$arr[1]='abc';//或者通過其它途徑修改變數值
$text=implode($arr);//把數組連接為字元串
file_put_contents('a.txt', $text);//把字元串變數的內容寫入到文本文件裡面。
方法二、使用fopen、fgets、fputs、fclose函數讀寫文件,可以應付特大文件的修改。文件的修改一般方法是新建立一個文件,把源文件全部掃描一遍,遇到需要的部分進行處理,最後刪除源文件,更名新文件。例如下面的代碼把a.txt裡面的abc修改為def:
$fp1=fopen('a.txt','r');
$fp2=fopen('a.tmp','w');
while(!feof($fp1)){
$line=fgets($fp1);
$line=str_replace('abc','def',$line);
fputs($fp2,$line);
}
flcose($fp1);
fclose($fp2);
unlike('a.txt');
rename('a.tmp','a.txt');
『肆』 主要是這樣的,我想用php讀取txt文件里每一行的漢字 並實現16進制轉碼
題義是要將gbk編碼先轉換成utf8編碼然後在轉成urlecode。
寫代碼如下
<?php
$a=file('old.txt'); //舊文本
$f=fopen('new.txt','wt'); //新生成文本
foreach($a as $k=>$l){
$l=urlencode(iconv('gbk','utf-8',trim($l))); //cp936即gbk的早期版本
echo $l.'<br/>';
fwrite($f,$l."\n");
}
fclose($f);
=============
原文件內容:
漢字漢字
數字數字
網路網路
輸出文件內容:
%E6%B1%89%E5%AD%97%E6%B1%89%E5%AD%97
%E6%95%B0%E5%AD%97%E6%95%B0%E5%AD%97
%E7%99%BE%E5%BA%A6%E7%99%BE%E5%BA%A6
『伍』 PHP寫入到文本文件亂碼
php處理中文編碼老是有問題,這是編碼的問題,可以將txt文件另存為UTF-8的編碼再處理;
參考如下:
functionfile_utf8($filepath){
$f_contents=file_get_contents($filepath);
$encoding=mb_detect_encoding($f_contents,array('GB2312','GBK','UTF-16','UCS-2','UTF-8','BIG5','ASCII'));
$content_u="";
$handle=fopen($filepath,"r");
if($handle){
while(!feof($handle)){
$buffer=fgets($handle);
if($encoding!=false){
if(mb_detect_encoding($buffer)!='UTF-8'){
$buffer=iconv($encoding,'UTF-8',$buffer);
}
}else{
$buffer=mb_convert_encoding($buffer,'UTF-8','Unicode');
}
$content_u.=$buffer;
}
fclose($handle);
return$info=array('status'=>1,'message'=>$content_u);
}else{
return$info=array('status'=>0,'message'=>'打開文件失敗');
}
}