OSDN Git Service

uri_pickup_normalize_pathtofile(): Added
[pukiwiki/pukiwiki_sandbox.git] / spam / spam_pickup.php
index 09f52cb..c1a4d9d 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-// $Id: spam_pickup.php,v 1.63 2008/12/27 11:50:21 henoheno Exp $
+// $Id: spam_pickup.php,v 1.65 2008/12/31 15:44:14 henoheno Exp $
 // Copyright (C) 2006-2007 PukiWiki Developers Team
 // License: GPL v2 or (at your option) any later version
 //
@@ -42,18 +42,18 @@ function uri_pickup($string = '')
                 $string, $array, PREG_SET_ORDER | PREG_OFFSET_CAPTURE
        );
 
-       // Format the $array
+       // Reformat the $array
        static $parts = array(
                1 => 'scheme', 2 => 'userinfo', 3 => 'host', 4 => 'port',
                5 => 'path', 6 => 'file', 7 => 'query', 8 => 'fragment'
        );
-       $default = array('');
+       $default = array(0 => '', 1 => -1);
        foreach(array_keys($array) as $uri) {
                $_uri = & $array[$uri];
                array_rename_keys($_uri, $parts, TRUE, $default);
                $offset = $_uri['scheme'][1]; // Scheme's offset = URI's offset
                foreach(array_keys($_uri) as $part) {
-                       $_uri[$part] = & $_uri[$part][0];       // Remove offsets
+                       $_uri[$part] = $_uri[$part][0]; // Remove offsets
                }
        }
 
@@ -97,11 +97,15 @@ function uri_pickup_implode($uri = array())
                $tmp[] = ':';
                $tmp[] = & $uri['port'];
        }
-       if (isset($uri['path']) && $uri['path'] !== '') {
-               $tmp[] = & $uri['path'];
-       }
-       if (isset($uri['file']) && $uri['file'] !== '') {
-               $tmp[] = & $uri['file'];
+       if (isset($uri['pathtofile']) && $uri['pathtofile'] !== '') {
+               $tmp[] = & $uri['pathtofile'];
+       } else {
+               if (isset($uri['path']) && $uri['path'] !== '') {
+                       $tmp[] = & $uri['path'];
+               }
+               if (isset($uri['file']) && $uri['file'] !== '') {
+                       $tmp[] = & $uri['file'];
+               }
        }
        if (isset($uri['query']) && $uri['query'] !== '') {
                $tmp[] = '?';
@@ -120,7 +124,7 @@ function uri_pickup_implode($uri = array())
 
 // Normalize an array of URI arrays
 // NOTE: Give me the uri_pickup() results
-function uri_pickup_normalize(& $pickups, $destructive = TRUE)
+function uri_pickup_normalize(& $pickups, $destructive = TRUE, $pathtofile = FALSE)
 {
        if (! is_array($pickups)) return $pickups;
 
@@ -145,6 +149,28 @@ function uri_pickup_normalize(& $pickups, $destructive = TRUE)
                }
        }
 
+       if ($pathtofile) {
+               return uri_pickup_normalize_pathtofile($pickups, TRUE);
+       } else {
+               return $pickups;
+       }
+}
+
+// Normalize: 'path' + 'file' = 'pathtofile'
+// In some case, 'file' DOES NOT mean _filename_.
+// [EXAMPLE] http://example.com/path/to/directory-accidentally-not-ended-with-slash
+function uri_pickup_normalize_pathtofile(& $pickups, $removeoriginal = TRUE)
+{
+       if (! is_array($pickups)) return $pickups;
+
+       foreach (array_keys($pickups) as $key) {
+               $_key = & $pickups[$key];
+               if (! isset($_key['pathtofile']) && isset($_key['path'], $_key['file'])) {
+                       $_key['pathtofile'] = $_key['path'] . $_key['file'];
+                       if ($removeoriginal) unset($_key['path'], $_key['file']);
+               }
+       }
+
        return $pickups;
 }
 
@@ -792,8 +818,9 @@ function spam_uri_pickup($string = '', $method = array())
        }
 
        // Remove 'offset's for area_measure()
-       foreach(array_keys($array) as $key)
+       foreach(array_keys($array) as $key) {
                unset($array[$key]['area']['offset']);
+       }
 
        return $array;
 }