Extraire les URL dans un texte sous PHP 5
Résolu/Fermé
abcd0
Messages postés
56
Date d'inscription
mercredi 3 avril 2013
Statut
Membre
Dernière intervention
10 juillet 2013
-
3 avril 2013 à 11:42
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 18 avril 2013 à 19:10
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 18 avril 2013 à 19:10
A voir également:
- Extraire les URL dans un texte sous PHP 5
- Lien url - Guide
- Extraire une video youtube - Guide
- Extraire son video - Guide
- Excel cellule couleur si condition texte - Guide
- Transcription audio en texte word gratuit - Guide
5 réponses
Utilisateur anonyme
3 avril 2013 à 12:14
3 avril 2013 à 12:14
Salut salut,
Regarde de ce côté là :
Et vive PHP manual :
https://www.php.net/manual/fr/function.fopen.php
https://www.php.net/manual/fr/function.feof.php
https://www.php.net/manual/fr/function.fgets.php
Regarde de ce côté là :
<?php //déclaration d'un tableau $tableau = array(); //ouverture de ton fichier texte (tonfichier.txt) en lecture (r) $handle = @fopen("tonfichier.txt", "r" ); //Si le retour n'est pas false -> ouverture réussie if ($handle) { //Tant que ce n'est pas la fin du fichier while (!feof($handle)) { //Récupération d'une ligne $buffer = fgets($handle, 4096); //Insertion dans le tableau de la ligne récupérée $tableau[] = $buffer; } //Fermeture du flux fclose($handle); } if ($tableau) {//affichage du tableau print_r($tableau); } else {//Message d'erreur si échec echo "Le remplissage du tableau a échoué"; } ?>
Et vive PHP manual :
https://www.php.net/manual/fr/function.fopen.php
https://www.php.net/manual/fr/function.feof.php
https://www.php.net/manual/fr/function.fgets.php
Utilisateur anonyme
3 avril 2013 à 13:46
3 avril 2013 à 13:46
Utilise preg_match ça fonctionne très bien
https://www.php.net/manual/fr/function.preg-match.php
https://www.php.net/manual/fr/function.preg-match.php
abcd0
Messages postés
56
Date d'inscription
mercredi 3 avril 2013
Statut
Membre
Dernière intervention
10 juillet 2013
3 avril 2013 à 16:07
3 avril 2013 à 16:07
est ce que je peux tester sur le début des phrases (je voudrais ignorer les phrases qui commencent par "!") et mettre le reste dans un tableau
abcd0
Messages postés
56
Date d'inscription
mercredi 3 avril 2013
Statut
Membre
Dernière intervention
10 juillet 2013
3 avril 2013 à 16:28
3 avril 2013 à 16:28
il m'affiche le message suivant:
preg_match no ending dilimeter '!' found in /home/test.php on line 10
!!!
j'ai compris qu'il teste à la fin et moi je veux au début des phrases
preg_match no ending dilimeter '!' found in /home/test.php on line 10
!!!
j'ai compris qu'il teste à la fin et moi je veux au début des phrases
abcd0
Messages postés
56
Date d'inscription
mercredi 3 avril 2013
Statut
Membre
Dernière intervention
10 juillet 2013
3 avril 2013 à 16:46
3 avril 2013 à 16:46
j'ai inversé, j'ai fait if(!preg_match('/!^/' , $ligne)){ }
mais il n'a pas pris ça en considération, rien ne s'affiche!!
mais il n'a pas pris ça en considération, rien ne s'affiche!!
abcd0
Messages postés
56
Date d'inscription
mercredi 3 avril 2013
Statut
Membre
Dernière intervention
10 juillet 2013
4 avril 2013 à 09:50
4 avril 2013 à 09:50
Bonjour ;
j'ai essayé avec cette méthode mais ça marche pas; j'ai fait:
for($i=0; $i<$nb;$i++){
$mot='/!^/'
if(!preg_match($mot, $tab[$i])){
array_push($te, $tav[$i]);
} }
print_r($t)
est ce que quelqu'un a une idée comment corriger ça!!!
merci d'avance.
j'ai essayé avec cette méthode mais ça marche pas; j'ai fait:
for($i=0; $i<$nb;$i++){
$mot='/!^/'
if(!preg_match($mot, $tab[$i])){
array_push($te, $tav[$i]);
} }
print_r($t)
est ce que quelqu'un a une idée comment corriger ça!!!
merci d'avance.
Utilisateur anonyme
4 avril 2013 à 10:13
4 avril 2013 à 10:13
Essai comme ça :
if(!preg_match('/^!/','!hahaha')){ echo "ne commence pas par '!'"; }else{ echo "commence par '!'"; }
abcd0
Messages postés
56
Date d'inscription
mercredi 3 avril 2013
Statut
Membre
Dernière intervention
10 juillet 2013
4 avril 2013 à 10:34
4 avril 2013 à 10:34
merci pour ta réponse; mais quand je copie ton exemple il dit bien que "" commence par"" mais quand je modifie :
if(!preg_match('/!^/','!tab[$i]')){
print_r($tab);}
//car il y a bien des éléments dans mes sous tableaux qui ne commencent pas par"!"
je ne sais pourquoi!!!
if(!preg_match('/!^/','!tab[$i]')){
print_r($tab);}
//car il y a bien des éléments dans mes sous tableaux qui ne commencent pas par"!"
je ne sais pourquoi!!!
abcd0
Messages postés
56
Date d'inscription
mercredi 3 avril 2013
Statut
Membre
Dernière intervention
10 juillet 2013
4 avril 2013 à 10:55
4 avril 2013 à 10:55
excuse moi je ne peux pas te donner les données du tableau(c'est confidentiel); de toute façon avec ce que j'ai fait il affiche tout les élément de mon tableau à deux dimensions (les autres éléments contiennent "!" mais au milieu et moi je veux juste enlever ceux qui commencent avec "!")
Merci d'avance
Merci d'avance
abcd0
Messages postés
56
Date d'inscription
mercredi 3 avril 2013
Statut
Membre
Dernière intervention
10 juillet 2013
4 avril 2013 à 11:23
4 avril 2013 à 11:23
je ne sais pas est ce que je peux faire ça avec des classes!!!
Utilisateur anonyme
4 avril 2013 à 11:26
4 avril 2013 à 11:26
Non mais tu peux faire un exemple , si ton tableau ressemble à ce que tu m'as dis , à savoir:
Le code que j'ai mi fonctionne
array("!blablabla", "http://blop.blop", "!blobloblo", "http://arg.arg");
Le code que j'ai mi fonctionne
for($i=0;$i<count($tab);$i++){ if(!preg_match('/^!/',$tab[$i])){ echo $tab[$i]." : ne commence pas par '!'<br>"; }else{ echo $tab[$i]." : commence par '!'<br>"; } }
abcd0
Messages postés
56
Date d'inscription
mercredi 3 avril 2013
Statut
Membre
Dernière intervention
10 juillet 2013
4 avril 2013 à 11:51
4 avril 2013 à 11:51
je ne sais pas mais quand je fais ça:
for ($i=0; $i<$nb; $i++)
{
if(!preg_match('/^!/','$tab[$i]'))
{
array_push($te, $tab[$i]);
}
print_r($te);
}
je pense que c'est par rapport à mon tableau qui est un tableau à 2 dimension :
array(
[0]=>Array(
[0]=>!gsff hsztz gsfs
[1]=>jdgg ! hdg)
[1]=>Array(
[0]=>lkjd ! ioek ! jeuu mot phrase
[1]=>!pas pld ! pd
.
.
.)
.
.
.) c'est comme ça qu'il est mon tableau et comme ça qu'il s'affiche les élément sont des phrases.
for ($i=0; $i<$nb; $i++)
{
if(!preg_match('/^!/','$tab[$i]'))
{
array_push($te, $tab[$i]);
}
print_r($te);
}
je pense que c'est par rapport à mon tableau qui est un tableau à 2 dimension :
array(
[0]=>Array(
[0]=>!gsff hsztz gsfs
[1]=>jdgg ! hdg)
[1]=>Array(
[0]=>lkjd ! ioek ! jeuu mot phrase
[1]=>!pas pld ! pd
.
.
.)
.
.
.) c'est comme ça qu'il est mon tableau et comme ça qu'il s'affiche les élément sont des phrases.
Ok donc il faut que tu doubles la boucle :
for($i=0;$i<count($tab);$i++){
for($j=0;$j<count($tab[$i]);$j++){
if(!preg_match('/^!/',$tab[$i][$j])){
...
}
}
Par contre je vois dans l'exemple que tu as mi que dans ton tableau certains éléments ne sont pas des url et ne commencent pas par "!" du coup ça ne fonctionnera pas...
for($i=0;$i<count($tab);$i++){
for($j=0;$j<count($tab[$i]);$j++){
if(!preg_match('/^!/',$tab[$i][$j])){
...
}
}
Par contre je vois dans l'exemple que tu as mi que dans ton tableau certains éléments ne sont pas des url et ne commencent pas par "!" du coup ça ne fonctionnera pas...
abcd0
Messages postés
56
Date d'inscription
mercredi 3 avril 2013
Statut
Membre
Dernière intervention
10 juillet 2013
4 avril 2013 à 12:03
4 avril 2013 à 12:03
c'est une phrase qui commence par des mots ensuite URL
! mon titre http:/jfdnjfjvnfvnnj
c'est comme ça mes éléments
! mon titre http:/jfdnjfjvnfvnnj
c'est comme ça mes éléments
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié par [Dal] le 4/04/2013 à 12:26
Modifié par [Dal] le 4/04/2013 à 12:26
Salut abcd0,
Tu lis ton fichier avec file_get_contents pour mettre la totalité de son contenu dans une variable ((par exemple dans $contenu) :
https://www.php.net/manual/en/function.file-get-contents.php
Puis, tu utilises preg_match_all pour matcher toutes les URL contenues dans la variable $contenu, et les stocker dans un tableau (qu'on va nommer, par exemple, $urls), par rapport à une regex adéquate.
https://www.php.net/manual/fr/function.preg-match-all.php
Tu peux utiliser une regex, telle que :
Cette regex est inspirée de celle-ci : http://www.regexguru.com/2008/11/detecting-urls-in-a-block-of-text/ qui détecte des URL sur d'autres protocoles que http ou https et de cette réponse sur SO : https://stackoverflow.com/questions/2720805/php-regular-expression-to-get-a-url-from-a-string
Dal
Tu lis ton fichier avec file_get_contents pour mettre la totalité de son contenu dans une variable ((par exemple dans $contenu) :
https://www.php.net/manual/en/function.file-get-contents.php
Puis, tu utilises preg_match_all pour matcher toutes les URL contenues dans la variable $contenu, et les stocker dans un tableau (qu'on va nommer, par exemple, $urls), par rapport à une regex adéquate.
https://www.php.net/manual/fr/function.preg-match-all.php
Tu peux utiliser une regex, telle que :
preg_match_all('/https?:\/\/[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $contenu, $urls); print_r($urls);
Cette regex est inspirée de celle-ci : http://www.regexguru.com/2008/11/detecting-urls-in-a-block-of-text/ qui détecte des URL sur d'autres protocoles que http ou https et de cette réponse sur SO : https://stackoverflow.com/questions/2720805/php-regular-expression-to-get-a-url-from-a-string
Dal
abcd0
Messages postés
56
Date d'inscription
mercredi 3 avril 2013
Statut
Membre
Dernière intervention
10 juillet 2013
4 avril 2013 à 12:49
4 avril 2013 à 12:49
salut Dal merci pour ta réponse
mais quand j'ai fait ça:
for ($i=0; $i<$nb; $i++)
{for($j=0;$j<count($tab[$i]);$j++)
{
preg_match_all('/https?:\/\/[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $tab[$i], $urls);
print_r($urls);
}
il m'affiche ça
Array
(
[0] => Array
(
[0] => http://www.jhhfbbvbv
)
)
Array
(
[0] => Array
(
[0] => http://www.francehbhfhgfhghg
)
)
Array
(
[0] => Array
(
[0] => http://www.jhfhvfuhvuvvv
)
)
Array
(
[0] => Array
(
[0] => http://www.cjfjhvfhvjff
)
Array
(
[0] => Array
il n'est pas structuré ce tableau car moi mon tableau à deux dimension vu qu'il va contenir les nom des fichiers et le contenu de chaque fichier
mais quand j'ai fait ça:
for ($i=0; $i<$nb; $i++)
{for($j=0;$j<count($tab[$i]);$j++)
{
preg_match_all('/https?:\/\/[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $tab[$i], $urls);
print_r($urls);
}
il m'affiche ça
Array
(
[0] => Array
(
[0] => http://www.jhhfbbvbv
)
)
Array
(
[0] => Array
(
[0] => http://www.francehbhfhgfhghg
)
)
Array
(
[0] => Array
(
[0] => http://www.jhfhvfuhvuvvv
)
)
Array
(
[0] => Array
(
[0] => http://www.cjfjhvfhvjff
)
Array
(
[0] => Array
il n'est pas structuré ce tableau car moi mon tableau à deux dimension vu qu'il va contenir les nom des fichiers et le contenu de chaque fichier
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
4 avril 2013 à 13:33
4 avril 2013 à 13:33
les résultats sont retournés dans $urls[0] (comme le montre le print_r), car il n'y a qu'une seule expression à capturer. C'est le fonctionnement normal de preg_match_all.
a toi d'en faire ce que tu veux par la suite, les mettre dans un autre tableau, etc.
par exemple, en faisant :
preg_match_all ne va pas faire cela pour toi.
Dal
a toi d'en faire ce que tu veux par la suite, les mettre dans un autre tableau, etc.
par exemple, en faisant :
$res['fichier1'] = $urls[0];
preg_match_all ne va pas faire cela pour toi.
Dal
abcd0
Messages postés
56
Date d'inscription
mercredi 3 avril 2013
Statut
Membre
Dernière intervention
10 juillet 2013
4 avril 2013 à 13:41
4 avril 2013 à 13:41
Merci pour vous tous!! c'est vraiment gentil
abcd0
Messages postés
56
Date d'inscription
mercredi 3 avril 2013
Statut
Membre
Dernière intervention
10 juillet 2013
4 avril 2013 à 18:03
4 avril 2013 à 18:03
je ne sais pas pourquoi [25] => Array
(
[0] => http://www.hgdghg.html
)
[26] => Array
(
)
[27] => Array
(
)
[28] => Array
(
[0] => http://www.dfggnhdd.asp
) pourquoi 26 et 27 ne contiennent rien
(
[0] => http://www.hgdghg.html
)
[26] => Array
(
)
[27] => Array
(
)
[28] => Array
(
[0] => http://www.dfggnhdd.asp
) pourquoi 26 et 27 ne contiennent rien
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
4 avril 2013 à 18:50
4 avril 2013 à 18:50
Sans disposer de ton code et d'un jeu de données où ce problème se produit, on ne peut pas faire grand chose.
Dal
Dal
3 avril 2013 à 12:33