该用户从未签到
|
关于文件编码的检测,百度一下一大把都是,但是确实没有能用的、4 E, S' N7 m. g. N
很多人建议 mb_detect_encoding 检测,可是不知为何我这不成功,什么都没输出、
) U7 J$ h" t! I看到有人写了个增强版,用 BOM 判断的,我果断就无视了,这东西完全不靠谱、: p- d: }% C5 g1 L( i; V+ F1 M" A
最终根据PHP手册里 mb_detect_encoding 函数下方的例子,自己写了一个检测函数,
9 J" E7 O2 I4 e2 m5 o还包括自动检测编码并按指点编码读取文件的函数、9 ~5 X7 x( p3 z3 |$ f i+ U3 m2 _
源码献上,不喜勿喷。
- l1 G7 x' ^0 P7 |+ N( r网上的方法我试过没用才写的,说不定环境不一样导致的。! n* }3 o! X; g( K- a
所以万一没用,也别喷我,我只是共享想思路而已、、
8 h7 L9 k0 j( x/ _4 [2 W- <?php* \" X/ n- t# }1 }
- /**1 Q; h) w3 C" k1 C, G* \
- * 检测文件编码
6 A% J. _9 D% n% ?8 ] - * @param string $file 文件路径
! G! v0 s$ \7 @9 _+ y/ Z - * @return string|null 返回 编码名 或 null4 C% S. P+ d0 f: C
- */
5 a: `) R% f# W! g+ G7 F - function detect_encoding($file) {
: L$ w' ]; Y8 y4 P# J, [ - $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
* N5 `2 Y1 l/ @& H1 @ - $str = file_get_contents($file);
; Q/ m: L& M5 d9 X# R( ?% o$ L - foreach ($list as $item) {& e' R8 f7 X; }6 N* I
- $tmp = mb_convert_encoding($str, $item, $item);
: \( X/ @! g9 r$ Q8 @ - if (md5($tmp) == md5($str)) {3 L: Z8 m4 w( H% P3 P
- return $item;
4 L2 f7 B9 U3 u - }
3 b7 V' Q5 W" x - }1 A6 y `" G# ?
- return null;
0 L) [: d3 P5 V0 f& ? - }; o8 {* u; z U" K4 q* Y5 U4 a
- ' b( x, ?4 n2 h( u0 u
- /**
$ ^( Z4 t+ Y2 `" V0 d$ P4 V - * 自动解析编码读入文件# N4 b0 [3 s' w# A
- * @param string $file 文件路径6 T' Y: z1 t+ M- F7 @$ ]8 ?
- * @param string $charset 读取编码
2 j/ Q! `; C/ V9 L M& ~ - * @return string 返回读取内容0 p4 Y7 c# c1 g3 {
- *// @6 o8 u- u6 F0 t2 v
- function auto_read($file, $charset='UTF-8') {
6 r* X9 `- W7 T - $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
+ R1 N$ j6 q h5 @+ n/ p: R - $str = file_get_contents($file);( k; I& S0 G4 x, }
- foreach ($list as $item) {7 J/ L3 S% h4 H' p5 N: S
- $tmp = mb_convert_encoding($str, $item, $item);
e) g R# y8 {0 L" D/ L' g - if (md5($tmp) == md5($str)) {
5 `, J8 u+ G8 ~5 q6 P+ u - return mb_convert_encoding($str, $charset, $item);
$ m) m. s2 I% S2 _) L5 u. e - }7 h0 I. a" t J8 {* S: W
- }( w6 t" u' y1 J3 V4 c+ e% Y/ u
- return "";* A2 ~) F8 y2 k
- }
复制代码
$ B' A! {# z& w9 M7 o6 G9 a, u l0 c1 t9 Y( [( n
5 K! Y# Z4 W* V) G$ \
' M0 z4 Y0 @; Z! B) t+ d: g, _+ R
|
|