作者 : Bun Wong
日期 : 2009年04月20日
标签 : PHP
浏览 : 976 次
评论 : 5 个
http://www.hdwong.com/article/36/

几个 PHP 5.2 函数的旧版替代方法

技术交流 @ 2009年04月20日 收藏&分享

由于 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)

  • #1. 粉肠

    2009年04月20日

    支持!
    验证码居然问我 10 / 10 = ? 当我傻的
    。。。

  • #2. 番仔

    2009年04月22日

    还是我这个简单. 19X1

  • #3. ddd

    2009年07月26日

    ddd

  • #4. 大哥

    2009年08月25日

    jsonDecode 的呢?

  • #5. Bun Wong

    2009年08月26日

    可能我一般是都通过 php 单向向 js 发数据的原因,没有关心过 decode :)

* 昵称:

* 评论:

* 验证码: (请输入下图的 4 位数字)

Captcha看不请, 换一张

© 2011 Bun Wong

本博客基于 Bun PHP Framework 构建 • 粤ICP备07036370号