该用户从未签到
|
关于文件编码的检测,百度一下一大把都是,但是确实没有能用的、3 }# ^+ x- @" F2 C* \ e% V# r
很多人建议 mb_detect_encoding 检测,可是不知为何我这不成功,什么都没输出、" t' [0 B7 ^4 ]
看到有人写了个增强版,用 BOM 判断的,我果断就无视了,这东西完全不靠谱、
2 U& k7 R b9 Y4 E1 n: ?! r: W! [ u; v8 P最终根据PHP手册里 mb_detect_encoding 函数下方的例子,自己写了一个检测函数,0 ]4 n1 G2 S% U* J5 ~$ g; O
还包括自动检测编码并按指点编码读取文件的函数、
/ k( e* ~# w, S& y源码献上,不喜勿喷。
j/ j" ? t8 C8 d网上的方法我试过没用才写的,说不定环境不一样导致的。 Z7 z0 g$ Y B3 j( s1 _6 \& E3 L% u
所以万一没用,也别喷我,我只是共享想思路而已、、: `5 w$ v! }& s
- <?php
: h9 h* j/ w3 m5 R1 N - /**8 [. v3 J4 ^/ n
- * 检测文件编码( R5 a' a" o0 r7 O& O9 T9 {+ k
- * @param string $file 文件路径& f3 o. L0 b1 L9 b. r, o
- * @return string|null 返回 编码名 或 null1 q# z }6 T, @) \) C
- */
8 Q& w, ]# l) F2 B! ?) Q- { - function detect_encoding($file) {% Y& n0 k7 V& v- P
- $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');$ a( n7 a5 h4 ]' Z
- $str = file_get_contents($file);5 m J2 Z+ ^. o/ q# T: ?# q. K
- foreach ($list as $item) {
/ }) Y' ?" C0 H5 v9 X6 _ - $tmp = mb_convert_encoding($str, $item, $item);. A6 v$ v7 i1 N$ j6 `
- if (md5($tmp) == md5($str)) {) `$ N7 C1 ?7 v- m) I+ T
- return $item;
M9 |6 C! q2 d! R - }
+ \: B- O1 n! a" }. M6 A' D+ m3 K3 m2 q - }
* B) V) l" N: J# F/ P9 `1 X - return null;
( [- ?8 u) y U0 f - }
2 ?; `- ~" n: C8 k3 ]5 C - $ j7 f( ~- r6 A7 H2 F
- /** \& V; n; X# k6 b, ~- H$ W9 ]
- * 自动解析编码读入文件' }) d* Q J; S+ w- d* \; e- @
- * @param string $file 文件路径
9 i- F( k8 i) r# c - * @param string $charset 读取编码+ W" c E s# q. I4 \" |4 g' i
- * @return string 返回读取内容
& U/ o$ ~1 b: d1 y8 t2 v - */
- c3 i: W9 W4 \1 F! k. {/ Q/ W: w - function auto_read($file, $charset='UTF-8') {
; }5 @$ x- \4 S; }9 o3 c7 c - $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');2 A u' T1 L7 G+ d8 i, t5 u/ U
- $str = file_get_contents($file);4 z' @( `; \9 y% n
- foreach ($list as $item) {
3 l) Q1 h: Z' v4 b) V1 ? - $tmp = mb_convert_encoding($str, $item, $item);2 H% S* N6 l- u9 O0 e" N" o
- if (md5($tmp) == md5($str)) {
# ]( }1 S% }! Y - return mb_convert_encoding($str, $charset, $item);7 c/ b D8 e. O N% \5 Z. y
- }
9 M# b$ _3 A. ? - }/ R9 S/ |7 P9 R! y0 n6 y
- return "";
& y/ V( I5 P5 x- u$ u - }
复制代码 $ f& }' ?$ V' d7 o; a6 M! j
/ b( r3 |/ C& _5 _; ^& A
+ r9 {3 Y8 b" ~/ J6 ~( m! B) h" S7 i9 ~2 y9 j9 U
|
|