找回密码
 注册会员

QQ登录

只需一步,快速开始

查看: 19595|回复: 0

[分享] php中隐形字符65279(utf-8的BOM头)问题

[复制链接]
发表于 2017-1-14 10:39:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转南昌530论坛

您需要 登录 才可以下载或查看,没有账号?注册会员

×
这篇文章主要介绍了php中隐形字符65279问题解决方法,其实就是utf-8文件的BOM头,本文给出了一个删除PHP文件BOM头的小程序,需要的朋友可以参考下

今天在CSDN看到一个php输出空白隐形字符65279的问题,在网上找了下,发下这个65279字符是php用来标记文件是utf-8编码的,输出的时候会一起输出到客户端,导致客户端如果使用ajax得到返回值时,无法匹配字符串。

php隐形字符65279解释如下:

UTF-8 编码的文件可以分为无 BOM 和 BOM 两种格式。

何谓BOM?

  "EF BB BF" 这三个字节就叫BOM,全称是"Byte Order Mard"。在utf8文件中常用BOM来表明这个文件是UTF-8文件,而BOM的本意是在utf16中用。

  utf-8文件在php中输出的时候bom是会被输出的,所以要在php中使用utf-8,必须要是使用不带bom头的utf-8文件。

  常用的文本编辑软件对utf-8文件保存的支持方式并不一样,使用的时候要特别留意。

例如:

1、使用ultraedit时,另存时会有“UTF-8”和“UTF-8 - 无BOM”两种选择。
2、 window的记事本保存的是带bom的。
3、EditPlus软件不同版本对utf-8的保存支持不一样,例如:2.31版本保存的是不带bom的,2.11版本保存的是带bom的。

把utf-8文件头去掉的办法:

1、使用ultraedit另存,选择“UTF-8 - 无BOM”
2、一个很有用的php程序,放在站点根目录下运行,会把目录下全部utf-8文件的bom头去掉,代码如下:
  1. //remove the utf-8 boms
  2. //by magicbug at gmail dot com
  3.    
  4. if (isset($_GET['dir'])){ //config the basedir
  5.    $basedir=$_GET['dir'];
  6. }else{
  7.    $basedir = '.';
  8. }
  9.    
  10. $auto = 1;
  11.    
  12. checkdir($basedir);
  13.    
  14. function checkdir($basedir){
  15.    if ($dh = opendir($basedir)) {
  16.      while (($file = readdir($dh)) !== false) {
  17.        if ($file != '.' && $file != '..'){
  18.          if (!is_dir($basedir."/".$file)) {
  19.            echo "filename
  20. $basedir/$file ".checkBOM("$basedir/$file")." <br>";
  21.          }else{
  22.            $dirname = $basedir."/".$file;
  23.            checkdir($dirname);
  24.          }
  25.        }
  26.      }
  27.    closedir($dh);
  28.    }
  29. }
  30.    
  31. function checkBOM ($filename) {
  32.    global $auto;
  33.    $contents = file_get_contents($filename);
  34.    $charset[1] = substr($contents, 0, 1);
  35.    $charset[2] = substr($contents, 1, 1);
  36.    $charset[3] = substr($contents, 2, 1);
  37.    if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
  38.      if ($auto == 1) {
  39.        $rest = substr($contents, 3);
  40.        rewrite ($filename, $rest);
  41.        return ("<font color=red>BOM found, automatically removed.</font>");
  42.      } else {
  43.        return ("<font color=red>BOM found.</font>");
  44.      }
  45.    }
  46.    else return ("BOM Not Found.");
  47. }
  48.    
  49. function rewrite ($filename, $data) {
  50.    $filenum = fopen($filename, "w");
  51.    flock($filenum, LOCK_EX);
  52.    fwrite($filenum, $data);
  53.    fclose($filenum);
  54. }
复制代码




上一篇:医生吴友平黄俊为获取暴力回扣严重伤害多名患者请求相关部门严惩
下一篇:南昌无良医生吴友平黄俊为牟取支架暴力,严重伤害多名患者,请相关部门严惩!
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

如需要(删违规/投诉/建议/赞助等)请联系

本论坛所有来帖仅代表网友个人观点,不代表青山湖畔|南昌论坛立场。
网警提示:网络刷单是违法 切莫轻信有返利,网上交友套路多 卖惨要钱需当心,电子红包莫轻点 个人信息勿填写,仿冒客服来行骗 官方核实最重要,招工诈骗有套路 预交费用需谨慎,低价充值莫轻信 莫因游戏陷套路,连接WIFI要规范 确认安全再连接,抢购车票有章法 确认订单再付款,白条赊购慎使用 提升额度莫轻信,网购预付有风险 正规渠道很重要 如网民接到96110电话,请立即接听。

手机版|南昌530论坛

GMT+8, 2024-12-4 01:53

Powered by Discuz! X3.5

Cpoyright © 2001-2024 Discuz! Team

快速回复 返回顶部 返回列表