PHP中file_get_contents函数获取URL文件内容时,带BOM的utf-8,用json_decode() 返回null的问题。
网上有二种处理方法:
1、正则
if(preg_match('/^\xEF\xBB\xBF/',$data)) //去除可能存在的BOM
{
$data=substr($data,3);
}
2、自动检测目录下文件并移除BOM
<?php
if (isset($_GET['dir'])){ //config the basedir
$basedir=$_GET['dir'];
}else{
$basedir = '.';
}
$auto = 1;
checkdir($basedir);
function checkdir($basedir){
if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file != '.' && $file != '..'){
if (!is_dir($basedir."/".$file)) {
echo "filename: $basedir/
$file ".checkBOM("$basedir/$file")." <br>";
}else{
$dirname = $basedir."/".
$file;
checkdir($dirname);
}
}
}
closedir($dh);
}
}
function checkBOM ($filename) {
global $auto;
$contents = file_get_contents($filename);
$charset[1] = substr($contents, 0, 1);
$charset[2] = substr($contents, 1, 1);
$charset[3] = substr($contents, 2, 1);
if (ord($charset[1]) == 239 && ord($charset[2]) == 187 &&
ord($charset[3]) == 191) {
if ($auto == 1) {
$rest = substr($contents, 3);
rewrite ($filename, $rest);
return ("<font color=red>BOM found,
automatically removed.</font>");
} else {
return ("<font color=red>BOM found.
</font>");
}
}
else return ("BOM Not Found.");
}
function rewrite ($filename, $data) {
$filenum = fopen($filename, "w");
flock($filenum, LOCK_EX);
fwrite($filenum, $data);
fclose($filenum);
}
?>
本人参考上面二种方法,均无效。
于是把 file_get_contents得到的内容(浏览器上显示的)复制出来,并粘贴进Netbeans空白PHP文件中,发现我的BOM内容根本不至3个字符。。。
于是修改如下:
。。。。//类其他文件,不用理
public static function checkBOM($contents) {
$j=0;
for($i=0;$i<strlen($contents);$i++){
$charset = ord(substr($contents, $i, 1));
if($charset==239 || $charset==187 || $charset==191 ){
$j++;
}
}
$contents = substr($contents, $j);
return $contents;
}
。。。。//类其他文件,不用理
调用页:
$data = file_get_contents(fileURL);
$data = func::checkBOM($data); //去除可能存在的BOM
$data = json_decode($data, true);
这样就OK了
相关推荐
PHP 获取JSON json_decode返回NULL解决办法,不小心在返回的json字符串中返回了BOM头的不可见字符,某些编辑器默认会加上BOM头,这样处理才能正确解析json数据
下面小编就为大家带来一篇Json_decode 解析json字符串为NULL的解决方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
见和系统要求 * PHP* mbstring extension* Charset UTF-8使用 php-json 如果您有错误“调用未定义的函数 json_encode() 或 json_decode()”,只需添加: require_once("phpJson.class.php");或者 require_once(...
json_decode 索引为数字时自动排序问题解决方法.docx
这两个函数使用的时候有很多的主要事项,在这里我来说一下json_decode()。 json_decode(): 对JSON 格式的字符串进行解码,接受一个JSON 格式的字符串并且把它转换为 PHP 变量。 (1)将数据转换成数组之后,打印会...
NULL 博文链接:https://onestopweb.iteye.com/blog/2380018
json_decode_cn3使用曲线救国方式,自行urlencode生成的代码在各类语言中也非常容易urldecode。##json_decode_fixPHP的json_encode总有一些不通用的缺陷,例如不能解析js的json对象(当键名没有引号时)。json_decode_...
本文实例讲述了PHP实现json_decode不转义中文的...要限制中文,使用JSON_UNESCAPED_UNICODE参数。 json_encode($a, JSON_UNESCAPED_UNICODE); 对于PHP5.3版本,可以先把ASCII 127以上的字符转换为HTML数值,这样避免
DVB-S2是在DVB的基础的改进技术,文件包是DVB-S2的最全代码,能够在MATLAB上直接运行!
签出。 这个怎么运作 ... 因此,每个需要外部输入并在PHP哈希表中进行解析的函数都容易受到复杂性攻击。 ...在目录test ,有PHP脚本演示了使用... 运行测试以针对具有冲突键的JSON键值对调用json_decode : docker run -it -
PHP程序设计-3期(KC016) 3.7.2JSON_DECODE常见问题.docx 学习资料 复习资料 教学资源
PHP json_encode与json_decode.rar
注意: 1、$value为要编码的值,且该函数只对UTF8编码的数据有效; 2、options:由以下常量组成的二进制掩码:JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS,JSON_NUMERIC_CHECK,JSON_PRETTY_PRINT, ...
intel graphics hd 630显卡已有硬件解码功能,linux平台下如何使用硬件解码呢?1.安装ffmpeg2.安装显卡驱动3.编译hw_decode.c #gcc -o hw_decode hw_decode.c -I/.../include -L/.../lib -lavformat -lavfilter -...
这各函数能将字符串转换成UTF8格式并且是十六进制的内码格式
PHP程序设计-3期(KC016) 3.7.2JSON_DECODE拓展知识.doc 学习资料 复习资料 教学资源
PHP程序设计-3期(KC016) 3.7.2JSON_DECODE课后习题.doc 学习资料 复习资料 教学资源
php中json_decode()和json_encode()的使用方法.docx
昨天同事遇到一个奇怪的问题,就是以下代码,无法通过JSON校验,也无法通过PHP的json_decode函数解析。...发现在“title”前面有一个字符,如果你之前了解过BOM,应该知道这个特殊字符就是BOM,关于其介绍可以参考另一篇