这篇文章主要介绍了PHP读取文件,解决中文乱码UTF-8的方法,结合实例形式对比分析了PHP文件读取及编码转换相关操作技巧,需要的朋友可以参考下
本文实例讲述了PHP读取文件,解决中文乱码UTF-8的方法。分享给大家供大家参考,具体如下:
1
2
3
4
5
6
7
8
|
$opts = array ( 'file' => array ( 'encoding' => "utf-8" ) ); $opts = array ( 'http' => array ( 'encoding' => 'utf-8' )); $ctxt = stream_context_create( $opts ); $content = file_get_contents ( $filePath , FILE_TEXT, $ctxt ); |
最简单的就是将GF2312→UTF-8
1
|
$str = iconv( "gb2312" , "utf-8" , $str ); |
不管用的
1
|
$content = mb_convert_encoding( $content , "UTF-8" , "auto" ); |
******************************************丑陋的分割线来告诉大家上面的不好的:下面的才是正确的方法···哈哈···**********************************************************
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
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)); $text = file_get_contents ( $newPath ); $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' ; $content = file_get_contents ( $newPath ); $content = iconv( $encodType , "utf-8" , $content ); |
终极版·····
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
$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 ); } |
以上的终极版·可以适应中文操作windows系统建立的ANSI``````````````UTF-8`````````Unicode`````的txt文本····