[PHP] Expréssion regulière

Résolu
coccoweb Messages postés 155 Statut Membre -  
coccoweb Messages postés 155 Statut Membre -
Bonjour,
Je cherche une solution pour extraire de mon url des informations
J'indique ici les information que je souhaite récupérer en gras.
La partie souligné correspond a une information inutile au script.

La partie en gras change continuellement

Voici une url :
http://mon-super-site.fr/forum-aero-debutant-13.htm

<?php

function test($chaine){
$chaine=str_replace($_SERVER['HTTP_HOST'].'/','', $chaine);
$chaine=str_replace('/','', $chaine); 
$chaine=str_replace('.htm','', $chaine); 

/* A partir d'ici il reste   forum-aero-debutant-13

return $chaine;
}
$chaine = $_SERVER['REQUEST_URI'];
echo test($chaine);

?>


4 réponses

  1. le_joker_fou Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   239
     
    ode('-',$chiane) te renvoie un tableau avec comme valeur array(forum,aero,debutant,13)
    0
  2. coccoweb Messages postés 155 Statut Membre 27
     
    et pour récupérer forum seul et le numérique qui peut se prolonger comme suit 13-1-15879 ?

    En réalité forum reste toujours un mot unique qui pourrai s'appeler topic ou encore article
    aero-debutant est lui change constamment et le numérique lui peut prendre une ampleurs comme 13-1-15879
    0
  3. mkl37 Messages postés 8 Statut Membre 3
     
    Pour récupérér le "forum" ou "topic" ou autre, du moment qu'il appart en premier dans ta chaîne de caractères, alors tu peux le récupérer facilement car il est contenu dans $chaine[0] c'est à dire dans le premier enregistrement du tableau retourné par la fonction explode('-', $chaine).

    Pour le numérique tu peux toujours faire une recherche avec la fonction is_numeric sur chacune des entrées du tableau $chaine

    Cordialement,
    0
  4. coccoweb Messages postés 155 Statut Membre 27
     
    Voilà bas un grand merci a tout ceux qui mon aidé

    Juste parce que je suis reglo et que la fonction créé est utile a tous la voila :

    Cette fonction génère la description de chaque page.

    
    <?php
    // exploser la chaine et un tableau (array)
    function exploserChaine( $chaine )
    {
    	/*
    	Explose une chaîne de caractère suivant pour en faire un tableau de mots clés
    	*/
    	$to = '-';
    	$from = ' ';
    	$chaine = strtr( $chaine, $to, $from ); // On remplace les caractères $to par des espaces
    	$tabTemp = explode( ' ', $chaine ); // On explose la chaîne dans un tableau temporaire suivant le délimiteur espace
    	foreach( $tabTemp as $k => $v )
    	{
    		if( $v != NULL ) // Pour éviter d'avoir des entrées vides
    		{
    			if( preg_match( '#(.*){1}(\')#', $v, $matches ) ) // On cherche un caractère suivi d'une apostrophe ( pour les mots du genre : d'autres )
    			{
    				$v = substr( $v, 2 ); // Si trouvé on élimine le caractère et l'apostrophe
    			}
    			$tabChaine[] = $v; // On ajoute le mot au tableau final
    		}
    	}
    	return $tabChaine;
    }
    
    
    function meta_description($chaine)
    {
    // ici on nettoie pour récupérer se qui nous intéresse. 
    $chaine=str_replace('http:','', $_SERVER['REQUEST_URI']); 
    $chaine=str_replace($_SERVER['HTTP_HOST'],'', $chaine);
    $chaine=str_replace('/','', $chaine); 
    $chaine=str_replace('.htm','', $chaine);
    
    /* A partir d'ici il reste   forum-aero-debutant-13
    On explose la chaine histoire de tout mettre dans un tableau
    */
    $chaine=exploserChaine($chaine);
    
    // Cette partie va créé un autre tableau uniquement numérique
    $c=0;
    foreach ($chaine as $element)
    {
    	if (is_numeric($element))
    	{
    		$id_post[$c]=$element;
    		$c++;
    	}
    }
    
    // Cette partie concerne le site
    switch($chaine[0])
    {
    // La page fais partie du forum
    case "forum":
    	if (isSet($id_post))
    	{
    // Si $id_post existe c'est que la page contient une valeur numérique
    
    	$req = mysql_query("SELECT forum_name, forum_desc 
    	FROM  'OS_forum_forum' 
    	WHERE  'forum_id' =".$id_post[0]."
    	LIMIT 0 , 1");
    	$data=mysql_fetch_assoc($req);
    
    // Cette astuce si permet de supprimer le BBcode appelé chez moi xCode
    	$desc = preg_replace('#\[(.*)\](.*)\[(.*)\]#U', '$2', $data['forum_desc']);
    // Maintenant il est utile de supprimer les espaces inutile.
    	$chaine = trim("Forum : ".$data['forum_name']." ".$desc);
    // La description meta contient max. 200 caractères. On coupe se qui depasse
    	if (strlen($chaine) > 200)
    	{
    	$chaine = substr($chaine, 0, 200);
    	$last_space = strrpos($chaine, " ");
    	$chaine = substr($chaine, 0, $last_space)."...";
    	}
    	return $chaine;
    	}
    	else
    	{ // Si id_post n'existe pas, c'est que nous somme dans l'index du forum
    	return "Forum dédié à l'aeromodelimse, l'entraide d'utilisateur d'hélicopter radio commandé (RC).";
    	}
    break;
    case "topic":
    // Idem pour les topics, grace aux jointure mySQL
    	$req = mysql_query("SELECT  'topic_titre' ,  'post_texte' 
    	FROM  'OS_forum_topic' 
    	LEFT JOIN  'OS_forum_post' ON  'OS_forum_post'.'post_id' =  'OS_forum_topic'.'topic_first_post' 
    	WHERE  'OS_forum_topic'.'topic_id' =".$id_post[0]."
    	LIMIT 0 , 1");
    	$data = mysql_fetch_assoc($req);
    	$post = preg_replace('#\[(.*)\](.*)\[(.*)\]#U', '$2', $data['post_texte']);
    	$chaine = trim("Portail : ".$data['topic_titre']." ".trim($post));
    	if (strlen($chaine) > 200)
    	{
    	$chaine = substr($chaine, 0, 200);
    	$last_space = strrpos($chaine, " ");
    	$chaine = substr($chaine, 0, $last_space)."...";
    	}
    	return $chaine;
    break;
    /* C'est super tout ca, mais les pages statiques ?
    Et bien on les identifie par la valeur du tableau
    */
    case "inscription":
    	return "Page d'inscription au Club d'aéromodélisme de Charleroi, région Dampremy. Entraide des modélistes. Participer au forum et discuter avec d'autres amateurs et profésionnels.";
    break;
    case "connection":
    	return "Page de connection au Club d'aéromodélisme de Charleroi, région Dampremy. Connectez-vous au monde du modélisme.";
    break;
    case "a_propos_de_RC_Charleroi_Dampremy_aero_modelisme":
    	return "A propos du Club d'aéromodélisme de Charleroi, région Dampremy. Tout se qu'il est bon de savoir sur nos motivations. Sortez donc de chez vous et venez nous rejoindre.";
    break;
    
    /* En cas d'oublie, la roue de secours est aussi utile et hop une entre par defaut */
    default:
    	return "Club d'aéromodélisme de Charleroi, région Dampremy. Libre d'accès pour tous. Possibilité de vol intérieurs, organisation privé";
    break;
    }
    
    }
    ?>
    


    Voilà une bonne prise de tête et les résultats.

    Encore merci.
    0