Bonjour,
Voila je rencontre un petit problème avec mon code.
Cette fonction vérifie le format d'une ligne d'un fichier, ici un lien (Le format d'un lien dans mon fichier est "NOM & LIEN").
//Check if the line is a link and if this link is available
//@return HTML of the link /or/ Error
function getLinks($line){
global $tab;
if (strpos($line, " *&* ") !== false){
$line = explode(" *&* ",$line);
foreach($line as $l)
$l = str_replace($tab, "", $l);
//if (!filter_var($line[1], FILTER_VALIDATE_URL)){
//if (!preg_match('#^http://[w-]+[w.-]+.[a-zA-Z]{2,6}#i', $line[1])){
if (!preg_match("\^(http|https|ftp):\/\/([\w]*)\.([\w]*)\.(com|net|org|biz|info|mobi|us|cc|bz|tv|ws|name|co|me)(\.[a-z]{1,3})?\z/i", $line[1])){
//Not a valid URL
echo "<script>console.log('NOT_A_VALID_URL : ".$line[1]."')</script>";
return createError('NOT_A_VALID_URL : '.$line[1]);
}
else if(@fopen($line[1], 'r')){
//Valide URL and not a dead link
$line = "<a href=\"".$line[1]."\" target=\"_blank\">".$line[0]."</a>\n";
return $line;
}
//DEAD_LINK
echo "<script>console.log('DEAD_LINK : ".$line[1]."')</script>";
return createError('DEAD_LINK : '.$line[1]);
}
//Not a link
echo "<script>console.log('NOT_A_LINK : ".$line."')</script>";
return createError('NOT_A_LINK : '.$line);
}
J'ai envie de sécuriser tous sa pour afficher les erreurs pour que l'utilisateur sache pourquoi cela ne fonctionne pas si il insert un lien mort, un mauvais format de lien, etc.
Cela ce stop sur la première erreur lorsque le format "NOM & LIEN" est respecter
J'ai tester ces trois verificateur mais rien n'y fait,
Avec cette condition :
if (!filter_var($line[1], FILTER_VALIDATE_URL))
J'obtiens :
Avec celle ci :
if (!preg_match('#^http://[w-]+[w.-]+.[a-zA-Z]{2,6}#i', $line[1])){
J'obtiens :
Et avec celle ci :
if (!preg_match("\^(http|https|ftp):\/\/([\w]*)\.([\w]*)\.(com|net|org|biz|info|mobi|us|cc|bz|tv|ws|name|co|me)(\.[a-z]{1,3})?\z/i", $line[1]))
J'obtiens :
Je vous remercie d'avance pour votre aide,
PatrickEDM.
Bonjour,
Pour le premier, c'est normal:
Beware a valid URL may not specify the HTTP protocol http://
Pour la troisième, c'est assez explicite:
if (!preg_match("#^(http|https|ftp):\/\/([\w]*)\.([\w]*)\.(com|net|org|biz|info|mobi|us|cc|bz|tv|ws|name|co|me)(\.[a-z]{1,3})?#z/i", $line[1]))
Merci de ta réponse, en faite le problème ne venait pas que de cette formule, je lis des liens format "NOM & Lien" dans un fichier .txt
Que j'explode comme cela :
$line = explode(" *&* ",$line);
Mais sur toutes les lignes sauf la dernière un caractère invisible (de taille 2) ce glisse mais je ne sais pas qu'elle est ce caractère.
Pourtant je supprime bien \n et \r.
$tab = ["\r","\n"];
$line = explode(" *&* ",$line);
foreach($line as $l)
$l = str_replace($tab, "", $l);
Désolé pour les preg_match c'est vraiment pas mon fort :/
Merci,
PatrickEDM