该用户从未签到
|
关于文件编码的检测,百度一下一大把都是,但是确实没有能用的、% o0 x2 C$ ~- @4 x: n* V4 w
很多人建议 mb_detect_encoding 检测,可是不知为何我这不成功,什么都没输出、2 {% b. @( s& U
看到有人写了个增强版,用 BOM 判断的,我果断就无视了,这东西完全不靠谱、
8 u X, _# n. d" L+ y! X最终根据PHP手册里 mb_detect_encoding 函数下方的例子,自己写了一个检测函数,
u$ w5 L3 e# n还包括自动检测编码并按指点编码读取文件的函数、4 d) U9 u# h7 X2 K4 A
源码献上,不喜勿喷。
9 m; d6 w1 u9 {- |$ F. T+ V" v' [网上的方法我试过没用才写的,说不定环境不一样导致的。, [4 u0 o6 d' [+ z# Z" x) S- A4 U
所以万一没用,也别喷我,我只是共享想思路而已、、
4 c! {* t% Z$ e! O# ]$ X1 S- <?php
% u% i( x( W! s; v - /**
0 D$ g) d Q& R0 n6 Q( a* c - * 检测文件编码' g) q, _; X! R C6 y7 w+ |
- * @param string $file 文件路径
+ c7 O; t" L4 W3 o) r - * @return string|null 返回 编码名 或 null
& h% W. |, G/ v0 Q* {' _ - */6 `8 o1 Y8 X1 S9 A
- function detect_encoding($file) {# I6 }+ f( e3 y+ p
- $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');2 G" y0 t3 l5 R- a5 S* S" r
- $str = file_get_contents($file);
1 h, e+ U5 Z) S2 F - foreach ($list as $item) {4 b5 x+ k, c t' |$ d
- $tmp = mb_convert_encoding($str, $item, $item);, t+ W9 Y- A9 k3 ?" O) u2 E
- if (md5($tmp) == md5($str)) {$ K, k( Y# \+ N4 g' S
- return $item;
& P! f# h; K* M) `% c6 | - }
. r' r3 i( v5 ~1 Z) P; u - }5 {; s9 p: I5 i, m) [: j' t& Z# F
- return null;# C& L6 L J7 H( }
- }. F2 R+ e# `. ?- p8 R% A# z- H: H
- : L- I5 l7 R$ A9 ^
- /**! v- p3 G9 H$ Q- ~, j
- * 自动解析编码读入文件
: h# F$ c) ~$ p. d - * @param string $file 文件路径
f" W8 B6 N5 U, F* u4 J7 X1 G - * @param string $charset 读取编码
8 T- C, f# Q' [' I - * @return string 返回读取内容& p5 p( g7 d+ n
- */5 R% W: Z5 |5 _/ l
- function auto_read($file, $charset='UTF-8') {
Z3 _7 k# B. @8 y4 q# b2 i. S - $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');: o. O5 A1 n) V
- $str = file_get_contents($file);
, M A/ i/ ~9 T$ O4 a: g- X% ^ - foreach ($list as $item) {
2 J3 K x3 I9 j" U, F+ x - $tmp = mb_convert_encoding($str, $item, $item);
. X9 H! j, T1 j5 i! } - if (md5($tmp) == md5($str)) {
7 x/ `% O3 I6 R: Q* U' q - return mb_convert_encoding($str, $charset, $item);- n0 }; a& T7 l3 _
- }
# d; o2 Z% ]- ~& z$ I - }
7 D. q: e- z, B* v8 q1 X - return "";4 z, V6 v/ j5 C: _: `; x6 w
- }
复制代码 + P) V& _" h {$ D6 a$ l% s! d
9 E' c0 B$ f, q/ Y+ r$ n9 h( g
, z. r2 V3 F1 r' q
% \0 r% F1 v5 {/ f% T: |3 V. S
|
|