该用户从未签到
|
关于文件编码的检测,百度一下一大把都是,但是确实没有能用的、( T/ F& x9 o0 J* c
很多人建议 mb_detect_encoding 检测,可是不知为何我这不成功,什么都没输出、
6 n) J8 T; D: l% z0 Z6 r看到有人写了个增强版,用 BOM 判断的,我果断就无视了,这东西完全不靠谱、: [/ w* V9 [ X! n9 ?9 j5 J
最终根据PHP手册里 mb_detect_encoding 函数下方的例子,自己写了一个检测函数,
* d o# \* X; W% G还包括自动检测编码并按指点编码读取文件的函数、
' Y" {7 Y) \/ Q- [# x2 \6 n% `6 i源码献上,不喜勿喷。
( W: N/ w* }# r8 Z( O$ G$ D3 D网上的方法我试过没用才写的,说不定环境不一样导致的。
( U, C* t* R8 E2 W% N所以万一没用,也别喷我,我只是共享想思路而已、、
( ^, v5 }/ {$ m: M( M) Q& H- <?php
7 C0 h8 o4 Y- M - /**
( U, ~6 R# l0 Z* |6 q& s7 i - * 检测文件编码8 p9 ], W, M* r. e2 \" [( I
- * @param string $file 文件路径5 ]6 \; a# \: l* O
- * @return string|null 返回 编码名 或 null) _* w6 Y- c* L5 {9 k
- */
! d+ r* L# z% C) e' y# W6 s - function detect_encoding($file) {
- R# V' X* R* I7 ~5 y( t: ~+ e& c! q - $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
+ h2 f3 y2 i# a! m# s" i; i6 J - $str = file_get_contents($file);
0 `5 C2 ~/ M! [2 E% k$ q - foreach ($list as $item) {
; H" k) J* W$ m7 h9 l. a2 ] - $tmp = mb_convert_encoding($str, $item, $item);
% ^5 d9 i' |* X1 [ Q2 k1 P$ I! C - if (md5($tmp) == md5($str)) {
% o$ f0 j9 h6 i# ]6 b - return $item;
3 M* u5 c8 [: Z& o+ A - }
0 q! n- J( d: a - }, x% L( V0 I& J( d, R: z
- return null;) P2 |) \2 \' u
- }
; u/ u5 `/ K" @# B5 g" |
3 ?% k4 e4 c _( ?8 f& d p- /**
& \; ^) ~* c; j2 L - * 自动解析编码读入文件
q1 o" ~1 i+ c7 L, U! v - * @param string $file 文件路径
1 H5 m/ m" c3 P3 d$ N( d - * @param string $charset 读取编码- @4 O( O( D, P6 m
- * @return string 返回读取内容4 ]& s0 x; z5 b4 V( l! {' ~8 T
- */
7 o2 Z3 Q. ?1 f- r/ m i - function auto_read($file, $charset='UTF-8') {
6 d& H: f- S4 x3 T - $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');4 i% G4 F. c% h
- $str = file_get_contents($file);- L S! g2 f, E* ]
- foreach ($list as $item) {7 x1 u4 _! o& h4 {& T7 T
- $tmp = mb_convert_encoding($str, $item, $item);
3 h2 l) z* Y- [! Q3 A - if (md5($tmp) == md5($str)) {5 A! I% K. \ @' r- k2 N# I4 T! d* r
- return mb_convert_encoding($str, $charset, $item);
( t6 u: l! X6 Y - }1 C8 Y' v _# Q1 A2 b" b
- }; `' B, o2 B% K# y# j5 N+ y9 [
- return "";
, P2 r7 Y3 }/ ? - }
复制代码 $ g* c3 } V% W3 l$ m
; _& Z7 h/ ^# a) n5 w$ I
( R* {8 W J# A: Q% D+ D1 |5 h2 {
~4 W+ j {0 B ? f+ ^' G
|
|