该用户从未签到
|
关于文件编码的检测,百度一下一大把都是,但是确实没有能用的、& M# Y$ l/ W) d1 n t, W
很多人建议 mb_detect_encoding 检测,可是不知为何我这不成功,什么都没输出、
# T$ o. ~% Q6 T4 ~看到有人写了个增强版,用 BOM 判断的,我果断就无视了,这东西完全不靠谱、( _% n; O$ j8 F) Q% k- W' C4 d
最终根据PHP手册里 mb_detect_encoding 函数下方的例子,自己写了一个检测函数,
/ ]6 B+ o; t3 |: y' D还包括自动检测编码并按指点编码读取文件的函数、
6 j7 O% H2 }9 C e+ b; v& C源码献上,不喜勿喷。" c4 ~% l' s# S
网上的方法我试过没用才写的,说不定环境不一样导致的。% m7 J$ S6 A+ \; m- O8 V
所以万一没用,也别喷我,我只是共享想思路而已、、
& m2 A& ^: h( o8 n/ V- <?php
! ?' f( G) w" z- T# k - /**5 y. f5 W: f9 _- x7 H
- * 检测文件编码# r) d- J3 O* l- K9 \
- * @param string $file 文件路径
% A0 w! w0 j9 Y8 l - * @return string|null 返回 编码名 或 null
2 C* r# Z, t) Z& g v5 k( ] - */
7 V+ z& U' A; {# \" [/ | - function detect_encoding($file) {% X* m0 ]1 m C3 X
- $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
n6 I, N) r8 t: O$ q# L: g - $str = file_get_contents($file);$ E% D0 ]6 u r- G; Y/ H/ ~
- foreach ($list as $item) {" H6 h% r0 F7 {7 p' s1 h
- $tmp = mb_convert_encoding($str, $item, $item);
5 P2 ^ S5 |- O1 n - if (md5($tmp) == md5($str)) {
( i+ [3 L4 _" {7 r4 K4 n z/ }* Y: F - return $item; s% a1 f% i+ s/ N. ]* K
- }
% q0 e3 D- I" w - }
6 n- @4 H6 B+ x; z2 t! { - return null;
' T$ n" n: x# h- b2 K0 F - }
1 Q6 |. Z" l3 }; M+ T% i - ' _: s- K$ a: O% N2 F$ Z8 u: j
- /**! k3 q, [2 E* ~# ~; ]# ^6 m
- * 自动解析编码读入文件# w z9 m! Q0 u. H' U
- * @param string $file 文件路径
1 Z6 \3 a7 a* e8 U - * @param string $charset 读取编码
$ U+ [+ X7 l5 {8 r# l/ | - * @return string 返回读取内容+ n& U9 Y, m6 W8 n8 f
- */
$ `; b% q4 `; |9 C& z- V3 }* D - function auto_read($file, $charset='UTF-8') {( a& A" g7 h2 r5 l% x' N
- $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');( {; D2 c! c v6 u8 J% ]. Q
- $str = file_get_contents($file);1 w4 e4 |* P; i) c* Z6 N
- foreach ($list as $item) {
; x2 d; P8 f5 X6 B - $tmp = mb_convert_encoding($str, $item, $item);
7 u; \, l w. S3 [ - if (md5($tmp) == md5($str)) {
$ }& G' u* I* o& ` - return mb_convert_encoding($str, $charset, $item);3 P4 ?* {* y7 u
- }
8 L! I& x$ L+ O5 p. S - }
' p# i( o8 J7 h: Z" `8 H6 A# K a - return "";
, m1 }3 t% O, z0 B4 U o - }
复制代码
6 r8 }. F$ ]) g' ~! b
1 `, C% I6 ~/ K: F* e: k+ }7 }3 Y) F1 x% }/ A( l3 y8 ?
( Z* B! Q9 A' \" E+ J: {; S
|
|