该用户从未签到
|
关于文件编码的检测,百度一下一大把都是,但是确实没有能用的、% j9 `) Z. b6 c( B
很多人建议 mb_detect_encoding 检测,可是不知为何我这不成功,什么都没输出、
9 z. M4 Z; x& v7 S8 \0 M看到有人写了个增强版,用 BOM 判断的,我果断就无视了,这东西完全不靠谱、
& O, x9 |' v! a3 d最终根据PHP手册里 mb_detect_encoding 函数下方的例子,自己写了一个检测函数,- w4 @( P# i& t/ v/ w4 x9 N9 h3 B
还包括自动检测编码并按指点编码读取文件的函数、3 q( o" I ?/ g5 R
源码献上,不喜勿喷。
3 \( g0 V# x/ ^( E" ~# O网上的方法我试过没用才写的,说不定环境不一样导致的。. l* ]$ e# O% ] p: r8 D8 {: A
所以万一没用,也别喷我,我只是共享想思路而已、、
: ?) H& h. s p ?- <?php
$ K0 v C9 A8 {% @5 P - /**$ B+ G" F( j. G
- * 检测文件编码; s) E: K6 G F# V$ E
- * @param string $file 文件路径
! X6 M: y% Q" h- ~6 d0 P; p P1 j - * @return string|null 返回 编码名 或 null( _ m+ X. Z. i+ Z( q Q
- */ F9 E$ k" i6 ?( Y
- function detect_encoding($file) {
9 v+ J! W+ v) W0 b - $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');9 m4 d- E6 A4 l; n
- $str = file_get_contents($file);) X( |0 e N, O. q& p( ]1 x2 j
- foreach ($list as $item) {
2 ^% v2 d# L% {7 j5 \ - $tmp = mb_convert_encoding($str, $item, $item);
7 U7 G0 ?; n, _# y6 W - if (md5($tmp) == md5($str)) {( ~3 V; M9 M6 A6 z
- return $item;( b! B5 |* a! T% `
- }
7 S x3 q" l0 \ - }, V! R1 F/ W1 ~8 ~# n l2 ^
- return null;3 I& w+ H6 N1 Y' {
- }7 n& K+ D9 ~$ S
- 3 e* C4 B& f# J9 _& J. h
- /**
( R* \+ H/ U8 c: A; i# P - * 自动解析编码读入文件. O6 C$ d. g( u
- * @param string $file 文件路径
" E! _" _5 W) U4 V: L# H& k - * @param string $charset 读取编码& ^; i3 B7 N; m' S& f0 O$ R; X+ L7 T
- * @return string 返回读取内容
3 T7 f! O/ Y8 {$ F - */
# m4 k/ f/ Q: C( ~; T - function auto_read($file, $charset='UTF-8') {/ C" Q4 Z: V7 ]9 @, J( _
- $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');/ H- E# c7 L, `3 S: |4 v
- $str = file_get_contents($file);! c" W% {0 b Y- N, b& w4 o2 @, R) W
- foreach ($list as $item) {
v8 G- A" I0 g- ?( L9 s# a - $tmp = mb_convert_encoding($str, $item, $item);3 L5 b! \! i. \6 W6 V+ Y: P
- if (md5($tmp) == md5($str)) {7 o1 N' b0 p) O
- return mb_convert_encoding($str, $charset, $item);, t: H' e: I ?8 B
- }7 t. v+ k* i4 Y, D; ~7 n: c. @; @
- }
# A# B5 f4 A. u' L# [: W( M# h - return "";) Y7 k3 k) ]: f& c0 D
- }
复制代码
2 P! r5 q* d( F- @8 Y. B4 M% i2 Z& {6 T" s x2 W- s
" U6 P6 l( |( U; b: x; i! v
) M* ?! v ]! S* V( {( p |
|