该用户从未签到
|
关于文件编码的检测,百度一下一大把都是,但是确实没有能用的、$ M! C( j/ N$ |7 M/ Y5 R- s
很多人建议 mb_detect_encoding 检测,可是不知为何我这不成功,什么都没输出、4 r1 W7 f2 X, m; a/ ~" a
看到有人写了个增强版,用 BOM 判断的,我果断就无视了,这东西完全不靠谱、
% o) z& @% `0 ]9 X8 h) B% j, _最终根据PHP手册里 mb_detect_encoding 函数下方的例子,自己写了一个检测函数,# m. N# E3 j9 T
还包括自动检测编码并按指点编码读取文件的函数、! q+ T7 l2 g. z, o
源码献上,不喜勿喷。6 S. v0 @% T3 Z: \/ x! Q
网上的方法我试过没用才写的,说不定环境不一样导致的。4 p$ k& Y% {. N7 l8 [
所以万一没用,也别喷我,我只是共享想思路而已、、$ h3 P( @4 A5 c
- <?php0 ^0 p" o2 X9 V' ~3 F
- /**
' U$ K9 `2 v2 a1 x! R - * 检测文件编码. ~: [# ~' M8 K- r: E
- * @param string $file 文件路径
' R9 c# h0 W8 Z - * @return string|null 返回 编码名 或 null
% H! ]( _0 K( Y1 B& u# c7 e1 B - */
' p' Y& F8 ?/ s - function detect_encoding($file) {
4 K H1 t8 J% f2 D - $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
4 r! E* l# Y# K - $str = file_get_contents($file);
2 E$ v9 e" Z* z) o. H0 U) J! F - foreach ($list as $item) {$ @ e: a8 w# R. q3 D! d0 B
- $tmp = mb_convert_encoding($str, $item, $item);
0 J7 B3 }7 m1 w. `" R% m: M1 S - if (md5($tmp) == md5($str)) {7 {# U) X( a6 u& [
- return $item;
% T& w& g+ s" x- W$ n- A - }
- [5 F0 }/ N7 X: G# ~ - }
. `/ C- R" N j/ y9 H! z; u - return null;$ L$ C6 w$ F( Y# R+ r
- }0 b0 E: Y6 z3 Q- R/ M9 D
- 6 G& h, i! q* V" g3 q7 _
- /**9 u1 V( n9 a6 }. X9 k' Z: i1 E$ a
- * 自动解析编码读入文件
, c' @! u) V r4 z - * @param string $file 文件路径
4 L/ F# A. `' \) \% ?" N6 t, y0 w - * @param string $charset 读取编码
1 \/ c7 H/ C" X& l- S - * @return string 返回读取内容! a4 e) w) Y2 E) f" l8 Z% |
- */, ~6 G# f# H6 \
- function auto_read($file, $charset='UTF-8') {
! k$ O" u: J0 K" R( T% k( ? - $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
) }# o$ z) G& P- P( t# h6 U W - $str = file_get_contents($file);
8 u; E: P: [/ } - foreach ($list as $item) {( b" E# n W9 I5 F# \
- $tmp = mb_convert_encoding($str, $item, $item);
1 D9 ?. z# j k9 o% z - if (md5($tmp) == md5($str)) {# y# p5 n# B# }7 c! ~$ H' t4 H
- return mb_convert_encoding($str, $charset, $item);
- [5 @0 [; y# Q/ V+ a8 K3 d - }
; V+ j0 }- n5 I, Q7 b" m _ - }
- J. R" _. Y% z" v# } - return "";
& K/ R4 F5 {! G! ?, n6 n; M - }
复制代码 9 S ]- T! O" U/ [; n, ?
2 A1 A. }# i+ @5 N0 f5 B3 G5 w
% I. C7 Z9 m/ W- E5 I
; s1 r6 H: E6 O, j# p! `, u |
|