该用户从未签到
|
关于文件编码的检测,百度一下一大把都是,但是确实没有能用的、' R, U( s7 N! }5 \ G
很多人建议 mb_detect_encoding 检测,可是不知为何我这不成功,什么都没输出、
Y2 d* s' B1 s' \ L3 E看到有人写了个增强版,用 BOM 判断的,我果断就无视了,这东西完全不靠谱、! C5 r8 p+ @. i" b! [. a5 k
最终根据PHP手册里 mb_detect_encoding 函数下方的例子,自己写了一个检测函数,1 v) E2 X: ]) W: w
还包括自动检测编码并按指点编码读取文件的函数、
4 m7 `2 O0 q, u0 S源码献上,不喜勿喷。
+ G5 ~8 R1 N; I% N* V网上的方法我试过没用才写的,说不定环境不一样导致的。
3 X0 A, K, v- ?' s5 U6 s8 ~所以万一没用,也别喷我,我只是共享想思路而已、、
2 e u `9 b4 H1 m6 U; H, x- <?php
$ O( w! o3 s% ?5 v0 g5 d2 u! n - /**
3 k# U8 L; |, t5 ^. s. m- s! R7 H - * 检测文件编码1 x2 Y( k7 [, O0 N
- * @param string $file 文件路径+ D3 X( T8 ^- d4 b2 l+ O2 c
- * @return string|null 返回 编码名 或 null* d! m. N) i w7 J' X/ ~$ S
- */" J4 e4 l+ Q X; q# c, ], ]2 j
- function detect_encoding($file) {
/ ]2 Q8 h5 S H8 Y z, ? - $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
' x7 K% @9 q" C2 R - $str = file_get_contents($file);+ ]# B6 | v+ U' w( Y$ H
- foreach ($list as $item) {* Z+ i& x$ f8 ?& ^; Y5 ]
- $tmp = mb_convert_encoding($str, $item, $item);
/ T/ Y4 `5 \, t5 x - if (md5($tmp) == md5($str)) {
C; J, W4 e: L6 `4 G, v. S9 B& ` - return $item;
% K; ?* ]6 ?# D7 ?2 @ m - }' i6 g: B) @' Y' g) M6 J
- }
: u+ p: @8 k8 ]" F- |4 A+ ^7 W' Q - return null;; V$ e3 q- g. h' G
- }
6 J1 b" _/ r# o. Y2 L9 p; X/ j
o5 M& U# {0 {- p; u& k# x/ l N- /**
6 Y2 ?6 E) H% H% E1 i$ P o1 _$ X- A - * 自动解析编码读入文件# l, P0 `0 }2 n. t9 _: U& W
- * @param string $file 文件路径
- c4 m+ x/ |! m9 O! O' D - * @param string $charset 读取编码
* n3 J4 G7 X$ D; g8 F - * @return string 返回读取内容
- M( m% V0 V% [4 Q* X8 d - */
8 h1 s4 a# X) c8 Y - function auto_read($file, $charset='UTF-8') {
3 J$ ~9 R7 n7 X& r9 u/ H - $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1'); C5 C! Z- w: Z: o
- $str = file_get_contents($file);1 {( z/ [: ^& \: _+ m+ \* o, X
- foreach ($list as $item) {
) a, K0 e% i- J( p2 x! a - $tmp = mb_convert_encoding($str, $item, $item);- A) \/ b6 @& K% k9 z$ c9 C) B4 E" }
- if (md5($tmp) == md5($str)) {
) ~ f* O5 u3 z' x `( s! z - return mb_convert_encoding($str, $charset, $item);
$ n t8 F) v$ H) J. e - }
4 L4 ^6 Q# q; A3 B2 I8 T" P - }
7 A1 ^* v/ p# _! w- v - return "";
4 O, l& H9 p: C. \: g - }
复制代码 8 O& D/ J9 W: k. e% d
* N! } Z U ^3 Q2 w, n4 Z2 @' u3 V
. O& @2 v& Z; N. ? |
|