[PHP] Expréssion regulière
Résolu
coccoweb
Messages postés
155
Statut
Membre
-
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
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
-
ode('-',$chiane) te renvoie un tableau avec comme valeur array(forum,aero,debutant,13)
-
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 -
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, -
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.