该用户从未签到
|
关于文件编码的检测,百度一下一大把都是,但是确实没有能用的、
; ~% @0 g/ _' {0 a很多人建议 mb_detect_encoding 检测,可是不知为何我这不成功,什么都没输出、
1 @' e8 ]0 ^8 E, p( e* L看到有人写了个增强版,用 BOM 判断的,我果断就无视了,这东西完全不靠谱、 z; r3 F8 }. M5 B" T* `
最终根据PHP手册里 mb_detect_encoding 函数下方的例子,自己写了一个检测函数,
) y! G9 O! B# l6 w还包括自动检测编码并按指点编码读取文件的函数、" k1 d. y: _5 U; l
源码献上,不喜勿喷。6 q2 N" |# c! e/ f* b3 y' R
网上的方法我试过没用才写的,说不定环境不一样导致的。
% m9 m$ \, p% O8 I* t所以万一没用,也别喷我,我只是共享想思路而已、、
7 g( w- P* g, J9 L K- <?php
% Y7 w/ a. c3 o5 W2 A4 j$ w - /**2 G9 Q0 ]. D- V. |! E+ }0 t# M
- * 检测文件编码9 k9 p [% I# _* N# L7 ^; x
- * @param string $file 文件路径$ Q; Z6 y, e& [
- * @return string|null 返回 编码名 或 null
& r4 q6 E& W& N8 y, v z - */
. K* J, q, v/ U/ T* y w - function detect_encoding($file) {
6 W3 \- P& G4 o) b, }$ g; I0 ? - $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');- G. Q7 E- H. M- ~8 U8 B9 Y. K _
- $str = file_get_contents($file);
# p2 Q r: d' M - foreach ($list as $item) {
# j, R0 I0 N L) b* O. x" a6 w - $tmp = mb_convert_encoding($str, $item, $item);5 ]' B' q: F8 o& z7 q! I0 C
- if (md5($tmp) == md5($str)) {, P6 t" `7 q1 A) ^' t
- return $item;
; m1 K0 f* S; @+ f8 s+ ^ - }( R. U3 N; D" J
- }
& j/ ^4 H+ [0 O# P$ T/ O: ~; w- N F1 R# c - return null;& }1 I2 f* Z* V
- }, f9 s6 a8 j; S m0 ?8 U- T% E
9 G1 i$ @, X: O- /**5 t% ^0 R, m7 H; {9 C$ M
- * 自动解析编码读入文件; E+ f" e$ v* v9 Q W+ r
- * @param string $file 文件路径$ G! w, j; z) u& Y3 L6 d y
- * @param string $charset 读取编码/ O3 ~$ P+ x1 D0 M/ R! H+ X
- * @return string 返回读取内容$ F4 P" ~9 c- t, W- n: S0 ?0 c4 }
- */; u$ V' Z6 ~/ c ^
- function auto_read($file, $charset='UTF-8') {2 R7 {& |- m& U$ U+ t
- $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
* F5 G$ L. w- O2 ?, R0 f - $str = file_get_contents($file);/ c1 f. W( \1 n& B% a. r
- foreach ($list as $item) {- w( n7 u V% S8 M/ L$ d# x4 I
- $tmp = mb_convert_encoding($str, $item, $item);* u9 P% j2 e$ i& ~2 ~6 O7 z
- if (md5($tmp) == md5($str)) {
+ P1 F* p. }3 ]0 E! h2 `# M% H - return mb_convert_encoding($str, $charset, $item);
/ S' e" ]2 C& r4 m1 b* I - }: O; D+ y8 M% j
- }
8 c2 E" l( L. I, E1 {4 M2 ]5 x - return "";! B5 R6 |$ D6 Z! q1 F% v; S& c
- }
复制代码
$ o+ l0 x) L6 l; {% A! W6 Q0 ]1 C. y: F; D- |3 H1 G$ z8 l# |
+ x( N+ W! F% z$ p
8 M! z6 t5 H% V) ~% ^8 ^: j |
|