开启左侧

非法字符 原因 以及解决办法

  [复制链接]
62077 115
cx 发表于 2017-11-21 21:37:41 | 只看该作者 |阅读模式 打印 上一主题 下一主题
模板文件生成html文件之后会在body开头处加入一个可见的控制符,导致页面头部会出现一个空白行。原因是页面的编码是UTF-8 + BOM。  
; W: W( R' }1 D
. A; s- F4 ?: B% p这种编码方式一般会在windows操作系统中出现,比如WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。) M* V/ l9 ?; b% k( Y
. X* c) T7 K+ b8 c5 o/ n
它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。
- S0 `' X6 P1 s) F* W9 y# M* K* [- W
对于一般的文件,这样并不会产生什么麻烦。
9 O; f( V* ^- W* z) ?, o; q
3 d) {! N6 U" q' ~; M但对于 PHP来说,BOM是个大麻烦。因为PHP并不会忽略BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。
; \/ w5 O5 _& p9 \; a* q
7 J9 v, s% Y8 D) x+ S! p根据嵌入式语言的特点,这串字符将被直接执行(显示)出来。! x! }# T1 q8 X; T6 J

1 T: [; j" C2 G由此造成即使页面的 top padding 设置为0,也无法让整个网页紧贴浏览器顶部,因为在html一开头有这3个隐藏字符!+ n2 u4 _' ?9 U" B) F! F0 r) A

8 \! f% r; A  F* m0 j8 c2 d5 L! y3 y直接notopad++ 保存为无dom格式 (格式-》转为UTF-8 无dom格式)   
! Z. O0 Z: j) ~7 ^6 q& d1 ^! x
然而文件比较多,又想偷懒下,使用下列方法来实现。    N, H( U' S) C' e$ @
& o8 [) F2 W& b% y3 b  z% y; G
将一下代码保存为a.php文件放到根目录下,执行一下,即可自动完成转换  n0 `& q* M% k
0 b: X! [9 g: H' s1 \) b1 Q

9 u  n6 _5 t3 {9 ]
  1. <?php 0 s) S4 D$ n: N) @" {6 k% y+ U
  2. // 设定你要清除BOM的根目录(会自动扫描所有子目录和文件)0 N/ ]/ o5 ^: y& x, r7 s( H" \* i: s
  3. $HOME = dirname(__FILE__);
    6 [5 B/ B8 ?. p3 v& v
  4. // 如果是Windows系统,修改为:$WIN = 1;/ \' H1 `( ?( z" O2 z
  5. $WIN = 0;. U( x# O. B% c5 I7 O8 Y
  6. ?>
    ) C2 o- ]- b9 F6 C+ n- p/ D* }
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">$ v( n8 F7 [9 ^
  8. <html xmlns="http://www.w3.org/1999/xhtml">
    : O8 M. Q2 j9 m4 @# n
  9. <head>
    " g$ p' v- {9 f$ ^6 u- y
  10. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />! V0 ]0 t. C$ V- Y- [, Z
  11. <title>UTF8 BOM 清除器</title>
    $ t  d4 `; a: Z% R7 [& B
  12. <style>/ h. Y$ P% W8 X0 W
  13. body { font-size: 10px; font-family: Arial, Helvetica, sans-serif; background: #FFF; color: #000; }
    & G2 o. I; d8 e
  14. .FOUND { color: #F30; font-size: 14px; font-weight: bold; }2 X3 x- }1 V7 s, `+ \% n2 i+ X
  15. </style>
    7 `+ \- |; {/ C
  16. </head>* S; [2 s& M1 k
  17. <body>
    9 [& p$ d* `- q/ H. T( u" h- b
  18. <?php( I* i. D" R4 C4 Y
  19. $BOMBED = array();
    3 n8 Z% j- v) l! b
  20. RecursiveFolder($HOME);+ p6 _0 W$ Q2 b% v
  21. echo '<h2>These files had UTF8 BOM, but i cleaned them:</h2><p class="FOUND">';% i8 i' z  ^; i; f
  22. foreach ($BOMBED as $utf) { echo $utf ."<br />\n"; }: M2 J. w" M% ?$ w0 d4 T% F
  23. echo '</p>';6 Z) K  v/ Y9 M5 D
  24. // 递归扫描) O% u8 F1 H' _7 N+ C
  25. function RecursiveFolder($sHOME) {& w% b' I6 r, X) a* h& g
  26. global $BOMBED, $WIN;
    - b4 l! X* Y2 H
  27. $win32 = ($WIN == 1) ? "\" : "/";: \. x" R# X! P( i3 n5 q  ~
  28. $folder = dir($sHOME);
    * W- v! }8 R- E) ^, l
  29. $foundfolders = array();
    & W8 q( G: r% c3 |0 i
  30. while ($file = $folder->read()) {. o! E2 r$ ]' M+ a
  31.   if($file != "." and $file != "..") {
    $ u. Z1 Q, h) `
  32.    if(filetype($sHOME . $win32 . $file) == "dir"){( V. i: d1 a, |
  33.     $foundfolders[count($foundfolders)] = $sHOME . $win32 . $file;
    ! ~) ?3 u1 G$ `8 ^! k
  34.    } else {" \9 @/ n% ]! A4 t4 O# M
  35.     $content = file_get_contents($sHOME . $win32 . $file);
    ! u. w% d# R6 s9 f: E1 ]
  36.     $BOM = SearchBOM($content);  b) @% J+ R% z* R* p; A9 O2 r
  37.     if ($BOM) {
    7 b7 q! n+ ~) p' y4 [
  38.      $BOMBED[count($BOMBED)] = $sHOME . $win32 . $file;
    " d/ D, p9 {' i
  39.      // 移出BOM信息
    7 T2 H: m. ?2 \
  40.      $content = substr($content,3);
      Z  [/ O& ?! p# @' j3 G/ z
  41.      // 写回到原始文件
    5 V: W+ i2 i$ \2 \/ s# |- J  _* u# J
  42.      file_put_contents($sHOME . $win32 . $file, $content);) \( K. x6 w, Y$ T4 A
  43.     }8 u! R- T# b. ^  `6 [2 T
  44.    }- s" L7 {8 u+ x
  45.   }
    4 Q: ^% D8 t% q& n3 ]
  46. }
    " p! N7 B* T, m" U
  47. $folder->close();
    ! V3 _& ~; ~( w0 L$ E0 l9 d7 G, \6 _
  48. if(count($foundfolders) > 0) {+ G0 {( u$ J9 m  [7 O% D: d. p
  49.   foreach ($foundfolders as $folder) {% R$ \, ]# f' E$ J7 t0 @) G& Z
  50.    RecursiveFolder($folder, $win32);
    1 v$ `2 C" [( h4 V: P" _- |/ y
  51.   }6 ^9 A/ Z8 x. s9 O% y" K/ p
  52. }8 X9 n' A7 G6 V) b
  53. }
    % u, z5 D" w6 [  f, F
  54. // 搜索当前文件是否有BOM. S* O+ B  F1 A' a$ v1 u/ |
  55. function SearchBOM($string) {
    : A4 B, k/ l+ W; j3 S+ e" v
  56.   if(substr($string,0,3) == pack("CCC",0xef,0xbb,0xbf)) return true;
    5 D6 P9 |0 F/ N7 o& S4 G
  57.   return false; . [6 R) t  p2 `
  58. }
    ) p1 X8 ^5 k7 W5 w
  59. ?>. G- R& x7 h" \4 Q
  60. </body>
    9 B  U8 I6 X8 @% V* a
  61. </html>
复制代码
这个管理员我已经测试过,确实好用的!!!如果懒得去制作文件,就下这个附件吧。用完再删除即可!
* u6 A  M; q1 `
  |/ P! \0 M8 S8 G* R% d! w$ [8 L

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
收藏
收藏0
分享
淘帖0
支持
支持0
反对
反对0
回复

使用道具 举报

精彩评论115

跳转到指定楼层
沙发
9x06k1t2j1 发表于 2017-11-21 21:40:19 | 只看该作者
确实不错,顶先
回复

使用道具 举报

板凳
z54012ce5i 发表于 2017-11-21 23:46:00 | 只看该作者
……
回复

使用道具 举报

地板
0c923d0rh7 发表于 2017-11-22 12:53:01 | 只看该作者
佩服佩服!
回复

使用道具 举报

5#
sl46h92w29 发表于 2017-11-22 19:52:57 | 只看该作者
是爷们的娘们的都帮顶!大力支持
回复

使用道具 举报

6#
zf05f43b2y 发表于 2017-11-23 04:20:01 | 只看该作者
我也来顶一下..
回复

使用道具 举报

7#
1g27uj781t 发表于 2017-11-23 11:37:56 | 只看该作者
沙发???
回复

使用道具 举报

8#
00851v3lgq 发表于 2017-11-24 11:25:22 | 只看该作者
……
回复

使用道具 举报

9#
47l53797e3 发表于 2017-11-24 13:42:15 | 只看该作者
学习下
回复

使用道具 举报

10#
b8i2oq76av 发表于 2017-11-26 04:36:31 | 只看该作者
围观 围观 沙发在哪里!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注

粉丝

帖子

发布主题
推荐阅读 更多
阅读排行 更多
精彩推荐
关闭

欢迎大神访问! 常来~上一条 /1 下一条

扫码联系微信

QQ号1:864750570

QQ号2:736375048

联系其一即可,YES~

QQ群9:752758310

管理QQ:

864750570

(有事咨询、留言,请直奔主题)
广东省深圳市南山区科智路08号
864750570@qq.com

手机版-小黑屋- 程序源码论坛  

Powered by king X 3.4© 2016-2023 www.cx1314.cn Inc.