Extraire les URL dans un texte sous PHP 5
Résolu
abcd0
Messages postés
56
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour;
je voudrais extraire des URL qui son contenus dans des fichier et les mettre dans un tableau mais je ne sais pas est ce que je peux faire ça avec php5;
quelqu'un à la moindre idée comment y procéder!!!!!!
Merci d'avance pour votre aide
je voudrais extraire des URL qui son contenus dans des fichier et les mettre dans un tableau mais je ne sais pas est ce que je peux faire ça avec php5;
quelqu'un à la moindre idée comment y procéder!!!!!!
Merci d'avance pour votre aide
A voir également:
- Extraire les URL dans un texte sous PHP 5
- Url - Guide
- Extraire une video youtube - Guide
- Extraire texte d'une image - Guide
- Extraire le son d'une vidéo - Guide
- Transcription audio en texte word gratuit - Guide
5 réponses
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
abcd0
Messages postés
56
Date d'inscription
Statut
Membre
Dernière intervention
Merci pour ta réponse mais ça je l'ai dejai fait ce que je voulais dire c'est que mon fichier contient des phrases et des URL et moi je veux que mon tableau ne contient que les URL et ignore les phrases
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
Essai comme ça :
if(!preg_match('/^!/','!hahaha')){ echo "ne commence pas par '!'"; }else{ echo "commence par '!'"; }
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
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>"; } }
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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