php-如何删除多个UTF-8 BOM序列

使用PHP5(cgi)从文件系统输出模板文件,并出现吐出原始HTML的问题。

private function fetch($name) {

$path = $this->j->config['template_path'] . $name . '.html';

if (!file_exists($path)) {

dbgerror('Could not find the template "' . $name . '" in ' . $path);

}

$f = fopen($path, 'r');

$t = fread($f, filesize($path));

fclose($f);

if (substr($t, 0, 3) == b'\xef\xbb\xbf') {

$t = substr($t, 3);

}

return $t;

}

即使我添加了BOM修复程序,但Firefox接受它仍存在问题。 您可以在此处查看实时副本:[http://ircb.in/jisti/](以及要检出的模板文件,我将其放在[http://ircb.in/jisti/home.html]中) )

任何想法如何解决这个问题? o_o

11个解决方案

129 votes

您将使用以下代码删除utf8 bom

//Remove UTF8 Bom

function remove_utf8_bom($text)

{

$bom = pack('H*','EFBBBF');

$text = preg_replace("/^$bom/", '', $text);

return $text;

}

jasonhao answered 2020-02-14T06:40:40Z

34 votes

尝试:

// -------- read the file-content ----

$str = file_get_contents($source_file);

// -------- remove the utf-8 BOM ----

$str = str_replace("\xEF\xBB\xBF",'',$str);

// -------- get the Object from JSON ----

$obj = json_decode($str);

:)

o1max answered 2020-02-14T06:41:05Z

13 votes

删除BOM的另一种方法是Unicode代码点U + FEFF

$str = preg_replace('/\x{FEFF}/u', '', $file);

Dean Or answered 2020-02-14T06:41:25Z

7 votes

b'\xef\xbb\xbf'代表文字字符串“ \ xef \ xbb \ xbf”。 如果要检查BOM,则需要使用双引号,因此\x序列实际上被解释为字节:

"\xef\xbb\xbf"

您的文件似乎还包含很多垃圾,而不仅仅是一个领先的BOM:

$ curl http://ircb.in/jisti/ | xxd

0000000: efbb bfef bbbf efbb bfef bbbf efbb bfef ................

0000010: bbbf efbb bf3c 2144 4f43 5459 5045 2068 ...../p>

0000020: 746d 6c3e 0a3c 6874 6d6c 3e0a 3c68 6561 tml>..

...

deceze answered 2020-02-14T06:41:52Z

4 votes

此全局函数解决了UTF-8系统基本字符集。 坦克!

function prepareCharset($str) {

// set default encode

mb_internal_encoding('UTF-8');

// pre filter

if (empty($str)) {

return $str;

}

// get charset

$charset = mb_detect_encoding($str, array('ISO-8859-1', 'UTF-8', 'ASCII'));

if (stristr($charset, 'utf') || stristr($charset, 'iso')) {

$str = iconv('ISO-8859-1', 'UTF-8//TRANSLIT', utf8_decode($str));

} else {

$str = mb_convert_encoding($str, 'UTF-8', 'UTF-8');

}

// remove BOM

$str = urldecode(str_replace("%C2%81", '', urlencode($str)));

// prepare string

return $str;

}

Patrick Otto answered 2020-02-14T06:42:14Z

3 votes

如果有人使用csv import,那么下面的代码很有用

$header = fgetcsv($handle);

foreach($header as $key=> $val) {

$bom = pack('H*','EFBBBF');

$val = preg_replace("/^$bom/", '', $val);

$header[$key] = $val;

}

phvish answered 2020-02-14T06:42:35Z

1 votes

另一种执行相同工作的方法:

function remove_utf8_bom_head($text) {

if(substr(bin2hex($text), 0, 6) === 'efbbbf') {

$text = substr($text, 3);

}

return $text;

}

我发现的其他方法在我的情况下不起作用。

希望它在某些特殊情况下有所帮助。

Alfred Huang answered 2020-02-14T06:43:04Z

1 votes

如果您正在阅读使用file_get_contents的一些API并从json_decode获得了无法解释的NULL,请检查json_last_error()的值:有时从file_get_contents返回的值将具有无关的BOM,当您检查字符串时,该BOM几乎是不可见的,但将使json_last_error()返回27468480252839901 (4)。

>>> $json = file_get_contents("http://api-guiaserv.seade.gov.br/v1/orgao/all");

=> "\t{"orgao":[{"Nome":"Tribunal de Justi\u00e7a","ID_Orgao":"59","Condicao":"1"}, ...]}"

>>> json_decode($json);

=> null

>>>

在这种情况下,请检查前3个字节-回显它们不是很有用,因为BOM表在大多数设置中不可见:

>>> substr($json, 0, 3)

=> " "

>>> substr($json, 0, 3) == pack('H*','EFBBBF');

=> true

>>>

如果上面的行为您返回TRUE,那么一个简单的测试可能会解决该问题:

>>> json_decode($json[0] == "{" ? $json : substr($json, 3))

=> {#204

+"orgao": [

{#203

+"Nome": "Tribunal de Justiça",

+"ID_Orgao": "59",

+"Condicao": "1",

},

],

...

}

Paulo Scardine answered 2020-02-14T06:43:35Z

1 votes

没有pack功能的解决方案:

$a = "1";

var_dump($a); // string(4) "1"

function deleteBom($text)

{

return preg_replace("/^\xEF\xBB\xBF/", '', $text);

}

var_dump(deleteBom($a)); // string(1) "1"

trank answered 2020-02-14T06:43:56Z

0 votes

这可能会有所帮助。 让我知道您是否关心我扩大我的思维过程。

//

// labled TESTINGSTRIPZ.php

//

define('CHARSET', 'UTF-8');

$stringy = "\xef\xbb\xbf\"quoted text\" ";

$str_find_array = array( "\xef\xbb\xbf");

$str_replace_array = array( '');

$RESULT =

trim(

mb_convert_encoding(

str_replace(

$str_find_array,

$str_replace_array,

strip_tags( $stringy )

),

'UTF-8',

mb_detect_encoding(

strip_tags($stringy)

)

)

);

print("YOUR RESULT IS: " . $RESULT.PHP_EOL);

?>

结果:

terminal$ php TESTINGSTRIPZ.php

YOUR RESULT IS: "quoted text" // < with no hidden char.

JayRizzo answered 2020-02-14T06:49:08Z

0 votes

使用错误的软件时,每次保存都会使BOM零件成倍增加。

因此,我正在使用它来摆脱它。

function remove_utf8_bom($text) {

$bom = pack('H*','EFBBBF');

while (preg_match("/^$bom/", $text)) {

$text = preg_replace("/^$bom/", '', $text);

}

return $text;

}

Juergen answered 2020-02-14T06:49:37Z

php utf8 bom,php-如何删除多个UTF-8 BOM序列相关推荐

  1. utf8 bom 去掉 java_utf-8-BOM删除bom

    utf-8  bom,去除bom //开始 function file_bom($wenjian,$remove = true) { //读取文件,将文件写入字符串 $contents = file_ ...

  2. java utf8无bom格式_关于java:编写没有BOM的UTF-8

    p>这段代码,/ p> pre> code> OutputStream out = new FileOutputStream(new File("C:/file/te ...

  3. oracle bom展开 sql,Oracle EBS-SQL (BOM-15):检查多层BOM(含common BOM).sql

    select       distinct b.lvl 层次, b.OPERATION_SEQ_NUM 工序, msi1.segment1 父件编码, msi1.description 父件描述, m ...

  4. 制造业BOM 工厂BOM管理系统 简单实用BOM管理系统,树形结构,目视化BOM管理系统,集成ERP、SAP的BOM管理系统,快速上线BOM管理系统

    这是之前开发的BOM业务,实现如下功能: bom资料.基础物料的导入导出.支持导入到sap: web目视化界面,可以对内容修改: 有校对基础资料功能.日志操作明细: 本考虑使用java开发,客户需求统 ...

  5. 【字符串2】(删除公共字符、合法括号序列判断、两种排序方法、密码强度等级)

    字符串题集 1. 删除公共字符 题目描述 题目分析 C++代码 2. 合法括号序列判断 题目描述 题目分析 C++代码 3. 两种排序方法 题目描述 题目分析 C++代码 4. 密码强度等级 题目描述 ...

  6. cadence导出bom清单_OrCAD Capture CIS 16.6 导出BOM

    OrCAD Capture CIS 16.6 一.选择设计文件:菜单:Tools > Bill of Materials... 二.Bill of Materials > Open in ...

  7. Bom是什么?列举你知道的Bom对象。

    BOM是browser object model的缩写,简称浏览器对象模型 ,提供了独立于内容而与浏览器窗口进行交互的对象 1.window对象 ,是JS的最顶层对象,其他的BOM对象都是window ...

  8. bom成本分析模型_拆解苹果HomePod发现BoM成本高达248.4美元

    在拆解苹果(Apple)首款智能音箱设备HomePod后表示,虽然HomePod平均售价(ASP)远高于Google Home或亚马逊(Amazon) Echo的智能音箱,但该设备成本高达248.4美 ...

  9. 给定一个递增序列,a1 a2 ...an 。定义这个序列的最大间隔为d=max{ai+1 - ai }(1≤in),现在要从a2 ,a3 ..an-1 中删除一个元素。问剩余序列的最大间隔最小...

    // ConsoleApplication5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<vector> ...

最新文章

  1. 深入理解ASCII,Unicode和UTF-8编码
  2. Java中Collection集合接口
  3. 正版七日杀服务器存档,七日杀网吧怎么存档 七日杀网吧存档读档方法介绍-游侠网...
  4. Linux高级编程--05.文件读写
  5. Android笔记:Activity
  6. 重磅:微信小程序开放公测了!
  7. 开源 php 报表,php网站流量统计系统-开源系统 | 学步园
  8. 比特币收购足球队,区块链准备登上绿茵场
  9. 5.被动回复用户消息
  10. 上传文件_Spring Boot文件上传
  11. 不知道Word转图片PDF怎么转?1分钟帮你快速转换
  12. JavaScript 进阶技能,中高级前端必备
  13. Audition CC 2019 Essential Training AuditionCC 2019基本训练 Lynda课程中文字幕
  14. Flixel框架介绍一
  15. 办公电脑远程软件有哪些、这几款你知道吗
  16. Windows环境下 .Net PetaPoco 配置 Mysql
  17. 零基础边缘端智慧交通训练营 | Lesson 4
  18. 波士顿地区Airbnb价格预测Project (一)
  19. 威漫哨兵机器人_漫威中实力最强的五大机器人,哨兵机器人能够团灭变种人!...
  20. VisionPro学习笔记:用IEEE1394相机抓取图像

热门文章

  1. 大数据 - HDFS单机环境搭建(一)
  2. 数据结构与算法A实验六图论---7-1 列出连通集(BFS DFS)
  3. springboot结合企业微信开发(一)发送消息,使用binarywang
  4. 《时代周刊》2019年度100大最佳发明榜单发布!中国2项上榜
  5. 云数据库 MySQL使用规范 数据库开发人员一定要看!
  6. 华为桌面云 服务器可以虚拟多少,一个桌面云服务器支持多少用户
  7. ArcGIS地图制图入门(一)
  8. tushare输出到excel_利用Excel获取Tushare金融大数据
  9. 穿梭福音 from AyuanX@newsmth
  10. redmi K30 5G拆解