该用户从未签到
|
关于文件编码的检测,百度一下一大把都是,但是确实没有能用的、, o; A/ y0 U3 z/ F& u: |: S$ N. ?
很多人建议 mb_detect_encoding 检测,可是不知为何我这不成功,什么都没输出、
& U5 B( s5 g8 F+ {" k看到有人写了个增强版,用 BOM 判断的,我果断就无视了,这东西完全不靠谱、
, H- L# _, d- n+ ]最终根据PHP手册里 mb_detect_encoding 函数下方的例子,自己写了一个检测函数,
6 U& |3 Y" \2 h4 X; w. {5 }还包括自动检测编码并按指点编码读取文件的函数、9 \$ D8 J. y, W
源码献上,不喜勿喷。
5 E7 e) ]; P$ K h0 y: F8 u网上的方法我试过没用才写的,说不定环境不一样导致的。. g1 {3 Y; T7 h1 B0 U
所以万一没用,也别喷我,我只是共享想思路而已、、
% S) O: C8 k: W- <?php
, J! L# A9 U/ J2 N! m2 `) E - /**
4 J6 T. V) H E+ }8 d( J/ N* f8 @ - * 检测文件编码
2 [6 K. S* k2 b - * @param string $file 文件路径' f3 a- @* `0 K
- * @return string|null 返回 编码名 或 null' }+ z+ @& s. v+ s4 A% v' W7 u% ?- j
- */" Z f. S( K* S/ p7 f/ I
- function detect_encoding($file) {! N2 W- t8 A% G6 [( x) H3 X
- $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
$ D/ E4 T) h/ X' A+ z - $str = file_get_contents($file);
# @6 X' B+ L4 k0 f) d w* ^ - foreach ($list as $item) {
/ c* c4 S8 T- ?: f6 O) p! N M - $tmp = mb_convert_encoding($str, $item, $item);
- _( D5 Y& j9 C* b: Y2 m5 i - if (md5($tmp) == md5($str)) {
$ D9 d! i1 n5 R- e4 Y - return $item;
& {* ~9 [, y1 `3 I$ y - }4 R4 q/ u6 A9 @! G8 a& w6 }$ o. t0 l
- }& r J# o# W3 K; g* |. i
- return null;# |4 G9 } _# f3 ^9 ?" `: D
- }
; _; L7 S' r( ? I4 E0 R$ |' c - ( W. ~0 K0 ]- `
- /**1 P8 h4 e$ g2 \! u5 f0 }2 K6 s
- * 自动解析编码读入文件- }1 t+ D; e) e; w9 i
- * @param string $file 文件路径
/ A2 n7 M# n+ P& L5 q% p - * @param string $charset 读取编码
( \$ ^ D& G( q0 H; f8 M - * @return string 返回读取内容
7 ]* [( E/ v. Z; L9 u$ q - */3 f m+ {: B* h8 c
- function auto_read($file, $charset='UTF-8') {
6 m) ]8 T2 \% J5 v8 |3 ]! y, T) N1 J - $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');1 s f1 B: @5 E: f* x% Z; v
- $str = file_get_contents($file);
/ L5 I4 p+ Y9 @" O* W - foreach ($list as $item) {
' ~# [7 C- t5 M) U Y - $tmp = mb_convert_encoding($str, $item, $item);( {/ x' J- n6 P: n/ U4 {
- if (md5($tmp) == md5($str)) {
) ?8 H3 I. d. Z% V; c - return mb_convert_encoding($str, $charset, $item);
W- M2 T0 K/ S8 g, o - }- ~/ m' @/ i8 X7 v, w
- }3 _* J' G; J2 `/ n
- return "";2 b* d2 J( {! i& N4 w1 P
- }
复制代码 & z0 k2 s& T3 g0 N3 C5 G
) B3 Y: l: l- q: \6 \- t
4 c# `! ~& r! f# w# g7 G; J R- T
|
|