2010-06-20 7 views
0

J'ai besoin d'une partie d'une URL extraite.Extraire une partie de l'URL pour une chaîne de requête

Exemple:

http://www.domain.com/blog/entry-title/?standalone=1 est l'URL donnée.

blog/entry-title doit être extrait.

Toutefois, l'extraction doit également fonctionner avec http://www.domain.com/index.php/blog/[…] comme URL donnée.

Ce code est pour un système de gestion de contenu.


Ce que je suis venu avec déjà est la suivante:

function getPathUrl() { 

    $folder = explode('/', $_SERVER['SCRIPT_NAME']); 
    $script_filename = pathinfo($_SERVER['SCRIPT_NAME']); // supposed to be 'index.php' 
    $request = explode('/', $_SERVER['REQUEST_URI']); 

    // first element is always "" 
    array_shift($folder); 
    array_shift($request); 

    // now it's only the request url. filtered out containing folders and 'index.php'. 
    $final_request = array_diff($request, array_intersect($folder, $request)); 

    // the indexes are mangled up in a strange way. turn 'em back 
    $final_request = array_values($final_request); 

    // remove empty elements in array (caused by superfluent slashes, for instance) 
    array_clean($final_request); 

    // make a string out of the array 
    $final_request = implode('/', $final_request); 

    if ($_SERVER['QUERY_STRING'] || substr($final_request, -1) == '?') { 
     $final_request = substr($final_request, 0, - strlen($_SERVER['QUERY_STRING']) - 1); 
    } 

    return $final_request; 

} 

Cependant, ce code ne prend pas soin des arguments à la fin de l'URL (comme ?standalone=1). Cela fonctionne pour les ancres (#read-more), cependant.

Merci beaucoup les gars et amusez-vous à tordre votre cerveau. Peut-être que nous pouvons faire cette merde avec une expression régulière.

Répondre

1

Il y a beaucoup d'exemples et d'informations pour ce que vous voulez à:

http://php.net/manual/en/function.parse-url.php

+0

J'ai oublié de mentionner que le index.php peut être en répertoire physique, tel que 'http: // www.domain.com/cms /'. Mon code fonctionne jusqu'à présent et grâce à la fonction 'parse_url' vous me l'avez référé maintenant ignore également les arguments supplémentaires de la chaîne de requête. Salut, mon pote! – Daniel

1

Cela devrait faire ce que vous avez besoin:

<?php 
function getPath($url) 
{ 
$path = parse_url($url,PHP_URL_PATH); 
$lastSlash = strrpos($path,"/"); 
return substr($path,1,$lastSlash-1); 
} 

echo getPath("http://www.domain.com/blog/entry-title/?standalone=1"); 

?> 
+0

Merci, j'ai déjà pris en compte le slash "de fin" de l'URL. Vous trouverez la solution finale décrite ci-dessus dans un commentaire sur la réponse de @ Zuul. – Daniel

Questions connexes