Raccourcir intelligemment une url pour l'affichage sur une page

Contenu du snippet

Cette fonction réduit, quand c'est nécessaire, la longueur d'une URL en vue de l'afficher sur une page Web pour que la mise en page de celle-ci ne soit pas déformée par une URL trop grande.

Plutot que de supprimer la fin de l'URL, la fonction remplace les noms de dossier au milieu de l'URL par des points ; concrétement par "(...)".

Inutile de préciser que ces URLs ne marchent plus, évidemment :o|

Source / Exemple :


function ShortDisplayURL($FullPath,$MaxLenght=150)
	{
    If (strlen($FullPath) > $MaxLenght)
		{
		//Suppression des arguments et fragment si nécessaire
		if (strpos($FullPath,"#",0) > 0) $FullPath = substr($FullPath,0,strpos($FullPath,"#",0));
		if (strpos($FullPath,"?",0) > 0) $FullPath = substr($FullPath,0,strpos($FullPath,"?",0));
		
	    If (strlen($FullPath) > $MaxLenght)
			{
			// Decompose l'URL
			$FullPathParsed=parse_url($FullPath);
			// Parties minimales
	        $RootPath = $FullPathParsed['scheme'].'://'.$FullPathParsed['host'];
			// Slash de fin si dossier
			if (substr($FullPathParsed['path'],-1) == '/')
				{
				$FullPathParsed['path'] = substr($FullPathParsed['path'],0,-1);
				$isFolder = TRUE;
				}
			else
				{
				$isFolder = FALSE;
				}
			$PathBaseName = basename($FullPathParsed['path']);
			$FullPathParsed['path'] = substr($FullPathParsed['path'],0,-1*strlen($PathBaseName)-1);
			// Pas besoin de citer l'index
			if (($PathBaseName == 'index.html') OR ($PathBaseName == 'index.php') OR ($PathBaseName == 'index.php3'))
				{
				$FullPathParsed['path'] = substr($FullPathParsed['path'],0,-1*strlen($PathBaseName)-1);
				$PathBaseName = basename($FullPathParsed['path']);
				$isFolder = TRUE;
				}
								
			if ($PathBaseName == '')
				{
				if (strlen($RootPath) > $MaxLenght) $RootPath = $FullPathParsed['scheme'].'://'.ShortDisplayHost($FullPathParsed['host'],$MaxLenght - strlen($FullPathParsed['scheme']) - 3);
				
				return $RootPath;
				}
			else if ($FullPathParsed['path'] == '')
				{
				return $RootPath.'/?/'.$PathBaseName;
				}
			else if ((strlen($RootPath)+strlen($PathBaseName)+3) >= $MaxLenght)
				{
				return $RootPath.'/?/'.$PathBaseName;
				}
			else
				{
				// Reduction du chemin
				while ((strlen($RootPath)+strlen($PathBaseName)+strlen($FullPathParsed['path'])+3) > $MaxLenght)
					{
					$FullPathParsed['path'] = substr($FullPathParsed['path'],0,-1*strlen(basename($FullPathParsed['path']))-1);
					}
					
				if ($FullPathParsed['path'] == '')
					{
					return $RootPath.'/?/'.$PathBaseName;
					}
				else
					{
					return $RootPath.$FullPathParsed['path'].'/?/'.$PathBaseName;
					}
				}
			}
	    Else
			{
	        return $FullPath;
			}
		
		}
    Else
		{
        return $FullPath;
		}
	}
	
function ShortDisplayHost($FullHost,$MaxLenght=80)
	{
	If (strlen($FullHost) > $MaxLenght)
		{
		if (substr_count($FullHost,'.') >= 2)
			{
			return $FullHost;
			}
		else if (substr_count($FullHost,'.') == 1)
			{
			$extension = substr($FullHost,strpos($FullHost,".",0));
			$FullHost = substr($FullHost,0,strpos($FullHost,".",0));
			$FullHost = substr($FullHost,0,10).'(?)'.substr($FullHost,-1*(10+3+1+strlen($extension))).'.'.$extension;
			}
		else
			{
			$FullHost = substr($FullHost,0,$MaxLenght-3).'(?)';
			}
		}
	else
		{
		return $FullHost;
		}
	}
	
function ShortDisplayName($FullName,$MaxLenght=50)
	{
	If (strlen($FullName) > $MaxLenght)
		{
		$FullName = substr($FullName,0,$MaxLenght-3).'(?)';
		return $FullName;
		}
	else
		{
		return $FullName;
		}
	}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.