php使用json_decode返回NULL

php5.2以后自带json_decode函数,但是对json文本串的格式要求非常严格。

很可能使用该函数得到的返回值是NULL

可以使用使用json_last_error()函数获取到的返回值来帮助我们判断出问题的原因。

其中如果提示错误JSON_ERROR_SYNTAX(Syntax error),表示json串格式错误。

Read More

PHP使用iconv函数遍历数组转换字符集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* 字符串/二维数组/多维数组编码转换
* @param string $in_charset
* @param string $out_charset
* @param mixed $data
**/

function array_iconv($data, $in_charset='GBK', $out_charset='UTF-8'){
if (!is_array($data)){
$output = iconv($in_charset, $out_charset, $data);
}elseif(count($data)===count($data, 1)){//判断是否是二维数组
foreach($data as $key => $value){
$output[$key] = iconv($in_charset, $out_charset, $value);
}
}else{
eval_r('$output = '.iconv($in_charset, $out_charset, var_export($data, TRUE)).';');
}
return $output;
}

Read More

ping localhost 返回 ::1的导致不能打开http://localhost的原因及解决

虽然可以在浏览器中正常访问http://localhost 但用file,file_get_contents等函数打开http://localhost 异常。用127.0.0.1也可以打开,本地hosts指向也正常,尝试ping localhost结果返回的是::1,推测不是httpd和php的配置问题,是php不能识别::1所致

ping localhost
reply from ::1: times<1ms
reply from ::1: times<1ms
reply from ::1: times<1ms

应该是返回127.0.0.1,::1显然是错误的,不过为什么呢,hosts文件也没有错啊

127.0.0.1 localhost

这导致php的file_get_contents,getimagesize等函数不能打开“ http://localhost ”开头的,只可以打开“ http://127.0.0.1 ”开头的。

卸载ipv6:ipv6 uninstall

一切恢复正常。

Read More

PHP让json_encode()指定回传格式

PHP 回傳 JSON 很方便, 只要將資料經過 json_encode() 就解決了.

不過因為 PHP 自動轉換型別, 造成很多資料都習慣存成字串, 希望在輸出 JSON 的時候, 數字部份可以輸出成數字, 該怎麼做呢?

另一個問題, PHP 轉換成 JSON, 部份陣列會被轉成对象(因為 JavaScript 陣列的 Key 必須是數字, 所以會轉成对象), 要全部強制轉成对象, 該怎麼做呢?

PHP 讓 json_encode() 指定回傳格式

上述的問題, json_encode() 的參數都可以解決.

Read More