该用户从未签到
|
关于文件编码的检测,百度一下一大把都是,但是确实没有能用的、
$ U& d9 [, W2 ]7 Y3 k5 P; J1 O3 E很多人建议 mb_detect_encoding 检测,可是不知为何我这不成功,什么都没输出、
$ H+ c X, t; w( z看到有人写了个增强版,用 BOM 判断的,我果断就无视了,这东西完全不靠谱、
4 p" X# U" r: W, t最终根据PHP手册里 mb_detect_encoding 函数下方的例子,自己写了一个检测函数,
( h8 V' q8 G; C8 m* [+ f: h$ S, N8 ~5 I还包括自动检测编码并按指点编码读取文件的函数、- A9 w( H% T9 C, b! o
源码献上,不喜勿喷。: F8 w$ O4 H- ~% s$ d- x d
网上的方法我试过没用才写的,说不定环境不一样导致的。 V. T, s0 x( z
所以万一没用,也别喷我,我只是共享想思路而已、、. f. _/ t0 \; t. Q+ T
- <?php
( V, _; s3 s3 q2 j* U- } - /**( q; T. W. T4 g/ l: v# _- Y) B
- * 检测文件编码( n% b7 t& w! U
- * @param string $file 文件路径% j4 M6 U* A( s8 W# ?* t; T0 M
- * @return string|null 返回 编码名 或 null
* L6 N9 _ G# b+ b( a* y - */4 k) z1 O( y2 B+ u) Q
- function detect_encoding($file) { v* `5 @7 J# l: B
- $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');; z3 H5 I$ V3 z* O+ j' a
- $str = file_get_contents($file);
D/ K' b( g. T+ H9 O& D' n - foreach ($list as $item) {( n) V" Z% v' t: f w+ V
- $tmp = mb_convert_encoding($str, $item, $item);7 G/ u/ h0 r4 S
- if (md5($tmp) == md5($str)) {/ E( d" W, x9 f
- return $item;
. M- d. B$ X, l. X5 C - }
0 K9 P9 J$ G9 F5 }# U5 e, N. i - }
. l" K9 t3 ` w# P; l - return null;
: j* @# N6 {1 ^# Q2 ? - }
7 I3 X( P: G$ s/ m1 n1 q
+ `8 O: x# n5 o3 j: n' ^! |& n9 y- /**
9 @+ q( n$ c" N, H# |! Z! T - * 自动解析编码读入文件
* T: ]3 _" P0 f - * @param string $file 文件路径% j8 Z5 {, u$ ]8 o
- * @param string $charset 读取编码
" B j- o/ Y) F. p3 p - * @return string 返回读取内容3 q7 R# R# [7 _
- */) F( L+ c+ e0 {+ ^7 V
- function auto_read($file, $charset='UTF-8') {$ {7 ~( Q4 Z% Z9 Y2 n+ {
- $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
" z& E y: c2 M! x - $str = file_get_contents($file);" X2 X* L8 _. G" d0 ~ V4 O! \: Q3 ^
- foreach ($list as $item) {
% B6 X c7 D0 Q: [2 m; w1 r - $tmp = mb_convert_encoding($str, $item, $item);+ \9 C+ F y; u5 T- N+ `
- if (md5($tmp) == md5($str)) {- _' k; X+ k1 o, v& Y4 ~
- return mb_convert_encoding($str, $charset, $item);4 v6 \3 x( l9 [4 E
- }5 m% P+ b. j: Z& `7 H4 |
- }( b! N7 c+ g+ [1 E) P" k
- return "";
7 N8 t: s0 [* S/ u8 B, R - }
复制代码 # I6 l/ O( Y7 m3 S
$ g8 K: o- _1 v8 L1 y1 p
# s3 x7 {# ^, i( ]( g! {" V8 s; v( @. y3 G
|
|