⑴ 對於php中file_get_contents 中文亂碼有什麼解決方案嗎
解決代碼邏輯如橘睜下
$content = '';
$text = file_get_contents($file);
//$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 (UTF8_BOM == $first3) {
$encodType = 'UTF-8 BOM';
} else if (UTF32_BIG_ENDIAN_BOM == $first4) {
$encodType = 'UTF-32BE';
} else if (UTF32_LITTLE_ENDIAN_BOM == $first4) {
$encodType = 'UTF-32LE';
} else if (UTF16_BIG_ENDIAN_BOM == $first2) {
$encodType = 'UTF-16BE';
} else if (UTF16_LITTLE_ENDIAN_BOM == $first2) {
$encodType = 'UTF-16LE';
}
//下面的判斷主要談肢還是判斷ANSI編碼的·
if ('' == $encodType) {
//即默認創建的txt文本-ANSI編碼的
$content = iconv("GBK", "UTF-8", $text);
} else if ('UTF-8 BOM' == $encodType) {
//本來就是UTF-8不用轉換
$content = $text;
} else {
//其他的格式都轉化為UTF-8就可以了
$content = iconv($encodType, "UTF-8", $text);
} (BY三人含伍世行慕課)
⑵ PHP mysql 如何將從數據中讀入的中文亂碼轉換成中文字元
要解決亂碼首先需要知道出現亂碼的原因:
一、PHP+MySQL出現中文亂碼的原因。
1. MYSQL資料庫的編碼是utf8,與PHP網頁的編碼格式不一致,就會造成MYSQL中的中文亂碼。
2. 使用MYSQL中創建表、或者選擇欄位時設置的類型不是utf8,而網頁編碼不是utf8,也可能造成MYSQL中文亂碼.
3. PHP頁面的字元集與資料庫的編碼不一致。
4. PHP連接MYSQL資料庫,操作是設定的語句指定的編碼和頁面編碼,PHP頁面編碼不一致。
5. 用戶提交的HTML頁面編碼,和顯示數據的頁面編碼不一致 ,就肯定會造成PHP頁面亂碼.
二、解決中文亂碼:
1. 網頁編碼設置。一般在HTML代碼中的文件頭<html>中加入屬性:
<meta http-equiv=」Content-Type」 content=」text/html; charset=utf-8″>
保證,網頁是"utf-8"編碼。
2. PHP代碼設置。在php代碼的開始部分加入以下代碼:
header(」Content-type: text/html;charset=utf-8″);
且要求保存的文件編碼方式是utf-8,這樣就保證了該文件也是utf-8編碼。
3. 資料庫中表的欄位中存儲中文的部分,要設置為utf8_general_ci類型。
4.PHP在連接資料庫操作時,要設置操作的欄位類型為utf8,設置方法如下:
mysql_connect(』localhost』,'user』,'password』);mysql_select_db(』db』);mysql_query(」set names utf8;」); //**設置字元集***
⑶ php file_get_contents亂碼問題
用mb_convert_encoding( $string, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5' ); 轉換編槐鍵塵碼鉛禪,iconv對中文亮陪支持不怎麼好
⑷ jquery ajax get中文請求亂碼問題(php)
function js_unescape($str)
{
$ret = '';
$len = strlen($str);
for ($i = 0; $i < $len; $i++)
{
if ($str[$i] == '%' && $str[$i+1] == 'u')
{
$val = hexdec(substr($str, $i+2, 4));
if ($val < 0x7f) $ret .= chr($val);
else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
$i += 5;
}
else if ($str[$i] == '%')
{
$ret .= urldecode(substr($str, $i, 3));
$i += 2;
}
else $ret .= $str[$i];
}
return $ret;
}
上面這個函數是接收ajax傳過來的參數是調用
使用方法:js_unescape($_GET['通過ajax傳過來的參數']);
function phpescape($str)
{
$sublen=strlen($str);
$retrunString="";
for ($i=0;$i<$sublen;$i++)
{
if(ord($str[$i])>=127)
{
$tmpString=bin2hex(iconv("utf-8","ucs-2",substr($str,$i,2)));
//$tmpString=substr($tmpString,2,2).substr($tmpString,0,2);linux下打開這項
$retrunString.="%u".$tmpString;
$i++;
} else {
$retrunString.="%".dechex(ord($str[$i]));
}
}
return $retrunString;
}
上面這個函數是返回給調用層進行的編碼操作
使用方法:phpescape('你所要輸出的內容');
⑸ 萬網虛擬主機php 腳本GET傳遞變數列印後是亂碼.
<td width="61%" height="25"><a href="1234.php?leibie=中國萬網">添加</a></td>
改成
<td width="61%"碼攜 height="25"><孫信a href="遲凱伏1234.php?leibie=<?=urlencode("中國萬網")?>">添加</a></td>
你需要進行url編碼,然後再解碼才行呢個
⑹ PHP中文亂碼問題
亂碼一般都是編碼不一致,如果頁面是php直接輸出字元串,最好在前面加上聲明
header("Content-type:text/html;charset=utf-8");
如果是html網頁代碼,頁面meta標簽就行:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
注意php頁面是否是utf-8格式,一般代碼編輯器會顯示,如下:
⑺ PHP 接收GET中文亂碼問題
哎,又是亂碼問題,我不多說,直接上代碼
if(!preg_match('/^.*$/u',$_REQUEST['word'])){
$username=iconv('GB2312','UTF-8',$_REQUEST['word']);
}
上面的代碼就是判斷傳來的是數據類型是不是UTF-8編碼,如果不是就轉成轉UTF-8編碼,當然只支持GB2313的,如果傳遞過來的編碼是big5的話也還是出現亂碼,但是一般瀏覽器中人用的大部默認是GB2312或是UTF8的,先用著再說
⑻ php file_get_contents 土豆視頻出亂碼
你用的這個函數由於使用的是高層傳輸協議,很容易超時,即使能夠判斷也因為重試次數太多而無法使用。至於curl函數,則不是為這種應用設計的。最好是使用fsocket函數,不會存在你說的問題。
⑼ 用php的file_get_content函數讀取圖片為什麼得到的字元串是亂碼
讀出來是亂碼是正常的,畢竟圖片是二進制文件,直接寫入文件就可以了,你輸出的時候聲明是圖片的頭就沒問題了