几个 PHP 5.2 函数的旧版替代方法
由于 Blog 虚拟主机的 PHP 版本是 5.1.6,因此有某些 PHP 5.2.0 才开始支持的函数或者常量还不能使用,这里放上改写的一些替代的方法
- pathinfo
pathinfo 的第二个参数可以传入常量来直接返回某部分的内容,包括 PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION, PATHINFO_FILENAME,其中 PATHINFO_FILENAME 用于返回文件名的正名 (就是除了扩展名的部分),在 PHP 5.2.0 才开始加上的,我们可以用一个简单的字符串处理方法来获取这个值
function pathInfoFilename($path) {
if (defined('PATHINFO_FILENAME')) {
return pathinfo($path, PATHINFO_FILENAME);
}
if (false !== strpos($path, '.')) {
return substr($path, 0, strrpos($path, '.'));
} else {
return $path;
}
} - json_encode
貌似以下的方法在某些浏览器下对中文支持并不是很好,该方法来自于 Drupal 的内核函数
function jsonEncode($var) {
if (function_exists('json_encode')) {
return json_encode($var);
} else {
switch (gettype($var)) {
case 'boolean':
return $var ? 'true' : 'false'; // Lowercase necessary!
case 'integer':
case 'double':
return $var;
case 'resource':
case 'string':
return '"'. str_replace(array("\r", "\n", "<", ">", "&"),
array('\r', '\n', '\x3c', '\x3e', '\x26'),
addslashes($var)) .'"';
case 'array':
// Arrays in JSON can't be associative. If the array is empty or if it
// has sequential whole number keys starting with 0, it's not associative
// so we can go ahead and convert it as an array.
if (empty ($var) || array_keys($var) === range(0, sizeof($var) - 1)) {
$output = array();
foreach ($var as $v) {
$output[] = $this->encode($v);
}
return '[ '. implode(', ', $output) .' ]';
}
// Otherwise, fall through to convert the array as an object.
case 'object':
$output = array();
foreach ($var as $k => $v) {
$output[] = $this->encode(strval($k)) .': '. $this->encode($v);
}
return '{ '. implode(', ', $output) .' }';
default:
return 'null';
}
}
}


留言 (5)
粉肠
April 20th 2009 • 20:46
支持!
验证码居然问我 10 / 10 = ? 当我傻的
。。。
番仔
April 22nd 2009 • 09:56
还是我这个简单. 19X1
ddd
July 26th 2009 • 11:59
ddd
大哥
August 25th 2009 • 21:31
jsonDecode 的呢?
Bun Wong
August 26th 2009 • 09:38
可能我一般是都通过 php 单向向 js 发数据的原因,没有关心过 decode :)