Location: PHPKode > scripts > Clean URL > clean-url/class.cleanurl.php
<?php
/******
** CleanURL
** Make your URLs User & Google friendly
** Version 0.9
******
** Author: Huda M Elmatsani
** Email: 	justhuda ** netscape ** net
**
** 2/Nov/2004
******
** Copyright (c) 2004 Huda M Elmatsani All rights reserved.
** This program is free for any purpose use.
********
**
** The scope of this class is to change the way writing URL Query String like this:
** from
**   news.php?id=120&page=2
** to
**   news/120/2
**
** edit your .htaccess and use directive RewriteRule
** Example:
**
** RewriteEngine on
** RewriteRule ^news(\/.*)*$  /news.php
**
**
** To create clean URL:
** $clean->makeClean('news.php?id=120&page=2');
** results 'news/120/2';
**
** To read clean URL
** $clean->parseURL();
** $clean->setRelative('relativeslash'); //relativeslash is variable name
** $clean->setParts('id','page');
**
** What is relative slash?
** think this img tag on index.php file directory:
** <img src="images/logo.jpeg">
** if you access your image logo from deeper directory, should be like this:
** <img src="../../images/logo.jpeg">
** Clean URL class makes the URL deeper because of using slashes
** the solution is placing variable that contains 'relative slashes'.
** <img src="<?=$relativeslash?>images/logo.jpeg">
**
** Note on setParts()
** $clean->setParts('id','page');
** this method will produce pairs of query string variables and values,
** using eval() function, webpage will read as:
** $id = 120;
** $page = 2;
**
**
**  EXAMPLES:
**  To create clean URL
**  original: <a href="news.php?id=<?=$id?>&page=<?=$page?>">;
**  convert:  <a href="<? CleanURL::makeClean("news.php?id=$id&page=$page")?>">
**  result on browser: <a href="news/120/2">;
**
**  To parse clean URL as above
**  $clean = new CleanURL;
**  $clean->parseURL();
**  $clean->setRelative('relativeslash');
**  $clean->setParts('id','page');
**
************/

class CleanURL {

	var $basename;
	var $parts;
	var $slashes;

	function parseURL() {
		 /* grab URL query string and script name */
		$uri = $_SERVER['REQUEST_URI'];
		$script = $_SERVER['SCRIPT_NAME'];
		/* get extension */
		$ext = end( explode(".",$script) );

		/* if extension is found in URL, eliminate it */
		if(strstr($uri,".")) {
			$arr_uri = explode('.', $uri);
			/* get last part */
			$last = end($arr_uri);

			if($last == $ext){
				array_pop($arr_uri);
				$uri = implode('.', $arr_uri);
			}
		}

		/* pick the name without extension */
		$basename = basename ($script, '.'.$ext);
		/* slicing query string */
		$temp  = explode('/',$uri);
		$key   = array_search($basename,$temp);
		$parts = array_slice ($temp, $key+1);
		$this->basename = $basename;
		$this->parts = $parts;

	}

	function setRelative($relativevar) {
		/* count the number of slash
		   to define relative path */
		$numslash = count($this->parts);
		$slashes="";
		for($i=0;$i<$numslash;$i++){
			$slashes .= "../";
		}
		$this->slashes = $slashes;
		/* make relative path variable available for webpage */
		eval("\$GLOBALS['$relativevar'] = '$slashes';");

	}

	function getParts() {
		/* return array of sliced query string */
		return $this->parts;
	}

	function setParts() {
		/* pair off query string variable and query string value */
		$numargs = func_num_args();
		$arg_list = func_get_args();
		$urlparts = $this->getParts();
		for ($i = 0; $i < $numargs; $i++) {
			/* make them available for webpage */
			eval ("\$GLOBALS['".$arg_list[$i] ."']= '$urlparts[$i]';");
		}

   }

   function makeClean($stringurl) {
		/* convert normal URL query string to clean URL */
		$url=parse_url($stringurl);
		$strurl = basename($url['path'],".php");
		$qstring = parse_str($url['query'],$vars);
		while(list($k,$v) = each($vars)) $strurl .= "/".$v;
		return $strurl;

   }
}


?>
Return current item: Clean URL