為什麼php讀取txt文件有亂碼
① php中讀文件中時,漢字亂碼怎麼解決
在<head>當中加上
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
② php 讀取 gbk txt文檔, utf8 輸出亂碼
首先要保證整個php文件是utf-8的格式
//最好寫上去,因為這也可能是頁面沒有設置字元集
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
//獲得字元串之後馬上把字元串轉成另一種編碼
$content = file_get_contents("800.txt");
$content = mb_convert_encoding($content, 'utf-8', 'gbk');
③ 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讀取文件顯示亂碼
是資料庫編碼問題
在建資料庫時用 utf8 字元集
在網頁中讀取時,要在查詢之前運行這個
mysql_query("set names 'gb2312'");
⑤ PHP讀取中文名稱文件亂碼,所以未能讀取出文件內容
編程語言大多不支持中文名字,建議改成英文的名字,如果你覺得不能所有文件都是英文的話,我告訴你一個辦法,上傳的時候對文件重新命名,通常以時間戳來命名。同時把原來的文件名讀取一個寫到資料庫做備注。資料庫有兩個欄位是放文件名的,一個是中文備注也就是原來的中文名。第二個是修改之後的文件名。
⑥ 從網站上採集文章保存在TXT里, 在本地用PHP讀取TXT, print後有亂碼字元.
請照我的方法調試,首先確認採集網站的html元數據meta的charset欄位是什麼,然後採集回來不要簡單的顯示,而是放入一個html文檔的body區域,且設定meta為想同,這樣肯定就不是亂碼了,如果採集網站的編碼為非utf-8,是不能直接轉化utf-8的,因為不是一一對應關系,你想太簡單了,兼職就是亂用iconv這個函數。這個函數是有局限性的,比如簡體繁體轉換。是不能用這個函數的。
⑦ 用PHP讀取一個TXT文件, 列印後有亂碼, 這是為什麼
我覺得這個可能跟你讀取TXT的內容的方法及處理有關,如果附上源代碼,可能更有助於解決問題。
從 Array ( [0] => 鍩a href=\"/2006/04/style/ 來看,
a href=\"/2006/04/style/ 這個說明TXT文件內容應該讀取出來了,只是你後期的處理(Array)可能有些不確定。
⑧ php讀取文檔內容亂碼
在輸出前加上
header('Content-Type:text/html; charset=utf-8');
UTF-8改成對應的編碼即可。
⑨ php讀文本文件讀出來的內容是亂碼怎麼辦
看看你PHP文件是什麼編碼,然後用記事本打你的PHP文件,另存為
選擇編碼類型覆蓋。
或者用把讀出來的字元串轉碼。
⑩ PHP分成N部分讀取TXT文件,漢字亂碼求解決(高手進)
substr截取字元串,但同樣會造成中文亂碼
給你一個 urf8格式下 切割字元串不造成 中文亂碼的 函數 你可以借鑒一下
/*
* 功能: 作用跟substr一樣,除了它不會造成亂碼
* 參數:
* 返回:
*/
function utf8_substr( $str , $start , $length=null ){
// 先正常截取一遍.
$res = substr( $str , $start , $length );
$strlen = strlen( $str );
/* 接著判斷頭尾各6位元組是否完整(不殘缺) */
// 如果參數start是正數
if ( $start >= 0 ){
// 往前再截取大約6位元組
$next_start = $start + $length; // 初始位置
$next_len = $next_start + 6 <= $strlen ? 6 : $strlen - $next_start;
$next_segm = substr( $str , $next_start , $next_len );
// 如果第1位元組就不是 完整字元的首位元組, 再往後截取大約6位元組
$prev_start = $start - 6 > 0 ? $start - 6 : 0;
$prev_segm = substr( $str , $prev_start , $start - $prev_start );
}
// start是負數
else{
// 往前再截取大約6位元組
$next_start = $strlen + $start + $length; // 初始位置
$next_len = $next_start + 6 <= $strlen ? 6 : $strlen - $next_start;
$next_segm = substr( $str , $next_start , $next_len );
// 如果第1位元組就不是 完整字元的首位元組, 再往後截取大約6位元組.
$start = $strlen + $start;
$prev_start = $start - 6 > 0 ? $start - 6 : 0;
$prev_segm = substr( $str , $prev_start , $start - $prev_start );
}
// 判斷前6位元組是否符合utf8規則
if ( preg_match( '@^([\x80-\xBF]{0,5})[\xC0-\xFD]?@' , $next_segm , $bytes ) ){
if ( !empty( $bytes[1] ) ){
$bytes = $bytes[1];
$res .= $bytes;
}
}
// 判斷後6位元組是否符合utf8規則
$ord0 = ord( $res[0] );
if ( 128 <= $ord0 && 191 >= $ord0 ){
// 往後截取 , 並加在res的前面.
if ( preg_match( '@[\xC0-\xFD][\x80-\xBF]{0,5}$@' , $prev_segm , $bytes ) ){
if ( !empty( $bytes[0] ) ){
$bytes = $bytes[0];
$res = $bytes . $res;
}
}
}
return $res;
}