程序源码论坛-1024
标题:
非法字符 原因 以及解决办法
[打印本页]
作者:
cx
时间:
2017-11-21 21:37
标题:
非法字符 原因 以及解决办法
模板文件生成html文件之后会在body开头处加入一个可见的控制符,导致页面头部会出现一个空白行。
原因是页面的编码是UTF-8 + BOM。
( T1 }; L2 y3 k. f8 R2 J& r
$ T. i9 z/ _2 j6 n3 Q: p
这种编码方式一般会在windows操作系统中出现,比如WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。
?& a1 ?7 ]$ E8 Y
1 H- \) z8 E, {: A, A* H4 M) X7 M. ?
它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。
9 v. \1 h5 O/ Y1 ]0 E( |, L
4 ~! m$ s& V3 |5 S4 a
对于一般的文件,这样并不会产生什么麻烦。
( \; m" Z; X+ M/ V3 D) P0 G; V8 j! B% W
! m% q$ ]$ S+ s( v7 @
但对于 PHP来说,BOM是个大麻烦。因为PHP并不会忽略BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。
- h4 U! U) G* b B. q1 u/ Y
9 N* w* U2 S( J& j
根据嵌入式语言的特点,这串字符将被直接执行(显示)出来。
9 {, X; K. D1 t
6 ~, _0 u; q! m; j1 o9 t/ {6 l L+ f
由此造成即使页面的 top padding 设置为0,也无法让整个网页紧贴浏览器顶部,因为在html一开头有这3个隐藏字符!
6 h; Z- ]9 Y0 e* q1 `
+ Z3 t/ V# k( N$ \3 A
直接notopad++ 保存为无dom格式 (格式-》转为UTF-8 无dom格式)
0 b* J0 _( [8 x
; c8 o5 G2 b% l: U% _/ g
然而文件比较多,又想偷懒下,使用下列方法来实现。
; V+ ~! Z3 a# S& D) a0 \* A0 f
" G3 ]2 X" v! _/ |/ \
将一下代码保存为a.php文件放到根目录下,执行一下,即可自动完成转换
6 ?8 t- p8 @0 {8 C$ i. w
; ?8 B7 }" k& a9 G! r I
[attach]793[/attach]
: Y& w# ~ O: V- F8 v
<?php
% x+ F; \& Y; m* v6 } t
// 设定你要清除BOM的根目录(会自动扫描所有子目录和文件)
3 o. K4 o! @/ T: m
$HOME = dirname(__FILE__);
) E! o# P: T9 r/ g
// 如果是Windows系统,修改为:$WIN = 1;
0 A/ ?$ _- ]6 U4 U" h
$WIN = 0;
# `9 c( W+ o, o, L
?>
3 p% P7 _+ q2 F8 F
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
# e/ v6 J- s( z5 _1 r4 I
<html xmlns="http://www.w3.org/1999/xhtml">
" P2 \$ _, p$ b: S
<head>
& i& {3 q. u) t8 k# e/ m+ A S% l
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7 L* a$ s y9 k: M) p
<title>UTF8 BOM 清除器</title>
! s7 r3 ]* {) t9 h% p
<style>
: V$ B1 x3 L" N/ J7 f
body { font-size: 10px; font-family: Arial, Helvetica, sans-serif; background: #FFF; color: #000; }
3 w; h- ~+ Q2 Q6 c1 \* |4 {
.FOUND { color: #F30; font-size: 14px; font-weight: bold; }
! C* H0 H) b8 u' y( |% F
</style>
! o% n# k4 T6 v. `# ?
</head>
, a) u7 n9 Y- [" a8 ?9 j0 ? z& |
<body>
9 `* v4 U; f3 z6 N
<?php
# M$ R! L `8 q5 i
$BOMBED = array();
8 _ J: Y" \+ W# _; S/ i' S- H
RecursiveFolder($HOME);
/ L# X7 o( X s% P" W- C: L2 c
echo '<h2>These files had UTF8 BOM, but i cleaned them:</h2><p class="FOUND">';
* K9 g" U4 i& s9 F* t
foreach ($BOMBED as $utf) { echo $utf ."<br />\n"; }
' ~# `3 g5 \! o, V, t+ e
echo '</p>';
5 z/ j9 } Q& n9 V3 ?
// 递归扫描
3 ?8 X' ]' W2 m5 d$ O8 J! B3 S
function RecursiveFolder($sHOME) {
: k0 S* D5 x, ]; Q
global $BOMBED, $WIN;
* W R& F! p3 t2 c
$win32 = ($WIN == 1) ? "\" : "/";
. `3 n2 x/ q7 w: l
$folder = dir($sHOME);
+ f7 o- Y0 S, }' G% _
$foundfolders = array();
$ [6 |- o! y! H
while ($file = $folder->read()) {
; X3 t1 W4 s2 d( h; `" @$ O
if($file != "." and $file != "..") {
/ l0 C; l7 p2 t, T) S( u
if(filetype($sHOME . $win32 . $file) == "dir"){
8 {, _3 R# V" A5 E5 D7 O9 U6 h- N2 x, x
$foundfolders[count($foundfolders)] = $sHOME . $win32 . $file;
4 `8 h' j/ T/ Y9 X- S3 `' z
} else {
+ C6 U0 Q" B' _. h
$content = file_get_contents($sHOME . $win32 . $file);
/ L" A3 Y4 _: ?/ `2 n
$BOM = SearchBOM($content);
( J0 }, b1 w' t9 m% {
if ($BOM) {
9 m3 |/ \$ X4 K! N' l% x
$BOMBED[count($BOMBED)] = $sHOME . $win32 . $file;
9 W* l8 s) R) I. y
// 移出BOM信息
8 K2 Z9 T( m7 u6 E% I7 ~+ z. v
$content = substr($content,3);
! l }8 O4 }- f, e
// 写回到原始文件
3 S# B, w$ p g* E4 p; i
file_put_contents($sHOME . $win32 . $file, $content);
/ s1 O1 o" T+ g/ a* K2 J5 v) L
}
$ o' N: u' a) R9 `+ T" Z9 B
}
$ Q }4 C! m6 p8 D( L5 n. \
}
8 {6 ]0 P+ P: T8 x3 b) {9 [
}
9 [( Y ]4 d }7 o6 n _
$folder->close();
I4 \% l: Q/ }7 \( i* `9 I: ^
if(count($foundfolders) > 0) {
% W4 c$ O5 E1 k( Z9 F) t e
foreach ($foundfolders as $folder) {
, Z( ^6 H9 c1 ~: M/ C6 N+ ?
RecursiveFolder($folder, $win32);
4 h# o! f1 R- j+ t
}
" {; K' C9 f4 m' c# W) b
}
: C! f/ _ d; ]0 L
}
7 c. s; ~# |" E1 S6 n
// 搜索当前文件是否有BOM
$ r f: \; h9 `# g) O
function SearchBOM($string) {
" H- G$ {8 K& b5 r4 B S$ k2 i
if(substr($string,0,3) == pack("CCC",0xef,0xbb,0xbf)) return true;
2 h- K X0 c) I1 B* e2 ^( N
return false;
. M5 n. x3 R+ O; ]
}
( D7 l& t+ `5 O$ l. }0 J
?>
+ m1 L1 h1 D5 W0 q2 W! T( @
</body>
, s1 G) @# q, Z; L: C: u! e( @. }
</html>
复制代码
这个管理员我已经测试过,确实好用的!!!如果懒得去制作文件,就下这个附件吧。用完再删除即可!
4 w6 {' n3 W9 `3 Y
[attach]792[/attach]
1 H( s6 h" J2 ]! [. _. i
作者:
9x06k1t2j1
时间:
2017-11-21 21:40
确实不错,顶先
作者:
z54012ce5i
时间:
2017-11-21 23:46
……
作者:
0c923d0rh7
时间:
2017-11-22 12:53
佩服佩服!
作者:
sl46h92w29
时间:
2017-11-22 19:52
是爷们的娘们的都帮顶!大力支持
作者:
zf05f43b2y
时间:
2017-11-23 04:20
我也来顶一下..
作者:
1g27uj781t
时间:
2017-11-23 11:37
沙发???
作者:
00851v3lgq
时间:
2017-11-24 11:25
……
作者:
47l53797e3
时间:
2017-11-24 13:42
学习下
作者:
b8i2oq76av
时间:
2017-11-26 04:36
围观 围观 沙发在哪里!!!
作者:
6951398s8q
时间:
2017-11-26 07:13
专业抢沙发的!哈哈
作者:
5dlshd1hzc
时间:
2017-11-26 10:33
啊啊啊啊啊啊啊啊啊啊啊
作者:
dg62939w1u
时间:
2017-11-26 11:25
楼主呀,,,您太有才了。。。
作者:
33u50l14l6
时间:
2017-11-26 12:27
楼下的接上
作者:
x72795v6kh
时间:
2017-11-26 13:19
我也顶起出售广告位
作者:
a0rfc0550j
时间:
2017-11-26 13:26
向楼主学习
作者:
r254bfcm93
时间:
2017-11-26 14:18
珍爱生命,果断回帖。
作者:
2349w232s0
时间:
2017-11-27 07:23
一直在看
作者:
r38ks41v3a
时间:
2017-11-27 16:50
顶
作者:
sj1vg68vf0
时间:
2017-11-27 20:02
支持楼主,用户楼主,楼主英明呀!!!
作者:
a63inp3u32
时间:
2017-11-27 23:47
占坑编辑ing
作者:
57ans34rl9
时间:
2017-11-28 07:19
好帖必须得顶起
作者:
x3yyf3g87y
时间:
2017-11-28 17:12
楼主呀,,,您太有才了。。。
作者:
a2ksv2hr04
时间:
2017-11-29 12:50
我了个去,顶了
作者:
053ea7okpx
时间:
2017-11-29 23:04
占坑编辑ing
作者:
gd046vs219
时间:
2017-11-30 04:31
OMG!介是啥东东!!!
作者:
4c7o968t2m
时间:
2017-11-30 05:28
确实不错,顶先
作者:
31w1cg12p5
时间:
2017-11-30 06:25
顶起顶起顶起
作者:
93wx38pf08
时间:
2017-11-30 06:32
顶顶更健康
作者:
631587lhnn
时间:
2017-11-30 06:44
鼎力支持!!
作者:
z3br67g600
时间:
2017-11-30 13:41
不错 支持下
作者:
beg6bj065x
时间:
2017-11-30 14:20
真是被感动的痛哭流涕……无法表达我对119源码的感谢!
作者:
112015ot84
时间:
2017-11-30 20:09
太给力了,永远支持119源码!
作者:
e7u0t94a3b
时间:
2017-11-30 21:15
第一次看到这样的源码,不错,顶下!
作者:
fw3oagn333
时间:
2017-12-1 11:56
谢谢楼主整理这些源码,有几个很不错的
作者:
pgyo6l277g
时间:
2017-12-1 12:35
啊啊啊啊啊啊啊啊啊啊啊
作者:
aod18cq0uh
时间:
2017-12-1 12:46
感恩无私的分享与奉献,119源码是我心中的神!
作者:
qa5ii6n54f
时间:
2017-12-2 10:47
我只是路过打酱油的。
作者:
n252a9t822
时间:
2017-12-2 12:31
这源码太好了,终于找到你了!
作者:
v597y7hs46
时间:
2017-12-2 12:35
1111111111111111
作者:
mitlm6e0wn
时间:
2017-12-3 09:38
这个源码不错,顶下!
作者:
511qqd76u2
时间:
2017-12-3 15:26
谢谢楼主整理这些源码,有几个很不错的
作者:
7gvxzb3696
时间:
2017-12-3 16:59
不说了,秒了!
作者:
90msgrml0w
时间:
2017-12-4 21:55
第一次看到这样的源码,不错,顶下!
作者:
h39955wj7i
时间:
2017-12-5 13:26
自从冲了永久会员源码,全站源码下的太爽了!
作者:
22r9jdwn66
时间:
2017-12-5 14:20
谢谢楼主整理这些源码,有几个很不错的
作者:
264196t979
时间:
2017-12-5 15:52
第一次看到这样的源码,不错,顶下!
作者:
01xlj6jg06
时间:
2017-12-5 16:55
源码不错,谢谢!
作者:
wxou49yj1q
时间:
2017-12-6 04:13
自从冲了永久会员源码,全站源码下的太爽了!
作者:
7h1n6mk259
时间:
2017-12-6 04:34
1111111111111111
作者:
q7odmv09ck
时间:
2017-12-6 11:50
666666666666666666
作者:
7b1t1ekww0
时间:
2017-12-6 16:15
666666666666666666
作者:
md9h5jpy8j
时间:
2017-12-7 12:55
666666666666666666
作者:
9e0gk5x142
时间:
2017-12-7 13:03
1111111111111111
作者:
8t26udl8bc
时间:
2017-12-7 14:38
希望119源码论坛越做越好!
作者:
5tpo86814a
时间:
2017-12-7 23:53
这源码太好了,终于找到你了!
作者:
9656zdnz18
时间:
2017-12-8 15:25
666666666666666666
作者:
103w2cist2
时间:
2017-12-8 15:25
希望119源码论坛越做越好!
作者:
0m9z15w1t2
时间:
2017-12-8 15:26
优质源码还是119的最好!
作者:
lus4hh46c2
时间:
2017-12-8 18:26
楼主加油,我们都看好你哦。119源码是我的最爱!
作者:
r35g3c5q8h
时间:
2017-12-8 20:28
啊啊啊啊啊啊啊啊啊啊啊
作者:
8s0tl89k1n
时间:
2017-12-8 20:44
我只是路过打酱油的。
作者:
u8rf44rk6o
时间:
2017-12-8 22:27
优质源码还是119的最好!
作者:
095m6xlc56
时间:
2017-12-9 07:42
这个源码不错,顶下!
作者:
jenc32i3kd
时间:
2017-12-9 13:14
希望119源码论坛越做越好!
作者:
epn8b80jyu
时间:
2017-12-9 15:31
自从冲了永久会员源码,全站源码下的太爽了!
作者:
0zm4k9x87b
时间:
2017-12-9 20:34
激动人心,无法言表!再次感谢119源码帮我找到此极品!
作者:
r5vo84403r
时间:
2017-12-10 11:04
看到这帖子真是高兴!119源码真是极品!
作者:
u36n73kbqp
时间:
2017-12-10 17:33
很漂亮的源码,谢谢
作者:
j3kvg5761i
时间:
2017-12-10 23:45
太漂亮的源码了,非常感谢119源码论坛!
作者:
cd365t38va
时间:
2017-12-11 04:10
太漂亮的源码了,非常感谢119源码论坛!
作者:
1isfqla32q
时间:
2017-12-11 05:36
第一次看到这样的源码,不错,顶下!
作者:
5w292r1j2m
时间:
2017-12-11 16:03
谢谢楼主整理这些源码,有几个很不错的
作者:
ykiytyl468
时间:
2017-12-11 22:02
感恩无私的分享与奉献,119源码是我心中的神!
作者:
7pxxc7ylhh
时间:
2017-12-12 15:25
我只是路过打酱油的。
作者:
538c6h2c69
时间:
2017-12-12 15:26
太生气了,无法HOLD啦 >_<......
作者:
9s48bpl1lb
时间:
2017-12-12 16:00
很漂亮的源码,谢谢
作者:
wk7r8xgc6j
时间:
2017-12-12 18:31
啊啊啊啊啊啊啊啊啊啊啊
作者:
2292aqcn15
时间:
2017-12-12 18:48
激动人心,无法言表!再次感谢119源码帮我找到此极品!
作者:
994ku7p24r
时间:
2017-12-12 21:39
希望119源码论坛越做越好!
作者:
3qf69980ac
时间:
2017-12-12 23:29
淡定,淡定,淡定……
作者:
qd8cvg1233
时间:
2017-12-13 07:46
淡定,淡定,淡定……
作者:
h62cnz17g3
时间:
2017-12-13 08:54
为了三千积分!
作者:
593hqx58i8
时间:
2017-12-13 08:55
很漂亮的源码,谢谢
作者:
tq6a2r9659
时间:
2017-12-13 09:02
源码不错,谢谢!
作者:
l98srm544p
时间:
2017-12-13 09:03
太漂亮的源码了,非常感谢119源码论坛!
作者:
836wfpszoy
时间:
2017-12-13 09:05
啊啊啊啊啊啊啊啊啊啊啊
作者:
z2thm7i539
时间:
2017-12-13 09:23
强烈支持楼主,感谢119源码!
作者:
o2i36r5o1y
时间:
2017-12-13 09:31
这源码太好了,终于找到你了!
作者:
ix8yyq38c8
时间:
2017-12-13 09:33
感恩无私的分享与奉献,119源码是我心中的神!
作者:
zi4ro28acz
时间:
2017-12-13 09:44
优质源码还是119的最好!
作者:
szwvg0t6qt
时间:
2017-12-13 09:47
真是被感动的痛哭流涕……无法表达我对119源码的感谢!
作者:
77047nox15
时间:
2017-12-13 10:17
太生气了,无法HOLD啦 >_<......
作者:
rh0b5pfa34
时间:
2017-12-14 15:49
太漂亮的源码了,非常感谢119源码论坛!
作者:
50hovj067u
时间:
2017-12-15 08:19
我只是路过打酱油的。
作者:
0x4v3kbl8y
时间:
2017-12-15 15:27
太漂亮的源码了,非常感谢119源码论坛!
作者:
4snv84970z
时间:
2017-12-16 05:44
很漂亮的源码,谢谢
作者:
zc7f3y7387
时间:
2017-12-16 16:24
不错 收下了
作者:
f51szu8j8f
时间:
2017-12-16 22:46
啊啊啊啊啊啊啊啊啊啊啊
作者:
152501da2x
时间:
2017-12-17 07:11
谢谢楼主整理这些源码,有几个很不错的
欢迎光临 程序源码论坛-1024 (http://www.cx1314.cn/)
Powered by Discuz! X3.3