Detection automatique de nom de fichi er

Le
Guillaume GOURDIN
Bonjour à tous,

exite-t-il un moyen efficace de détecter dans une chaine de caracteres
les noms de fichiers et d'ajouter automatiquement la balise
href=file:// qui va bien?

Merci pour votre aide.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #18022821
Le 02/12/2008 12:11, Guillaume GOURDIN a écrit :

existe-t-il un moyen efficace de détecter dans une chaine de caracteres
les noms de fichiers et d'ajouter automatiquement la balise
href=file://... qui va bien?



Tout dépend de ce que tu acceptes comme noms de fichiers. Par exemple,
si "truc", "bidule" et "truc bidule" peuvent être tous les trois des
noms de fichiers, alors tu auras du mal à savoir lequel ou lesquels
représenter dans la chaîne « machin truc bidule chose ». De la même
manière, tu dois d'abord définir si le nom "dul" doit être ou non testé
dans la chaîne « bidule ».

Je vais supposer pour simplifier que tes noms de fichiers ne peuvent
être composés que des lettres 'a' à 'z', des chiffres '0' à '9' et des
trois caractères '.', '_' et '-'. Je suppose en outre que seule la plus
longue séquence possible de ces caractères peut être un nom de fichier
(ce qui élimine donc « dul » dans « bidule »).

En expression rationnelle PCRE, cela donne : /[a-z0-9._-]+/.

Une fois qu'on a trouvé un nom, il faut savoir si c'est un nom de
fichier. Tu n'as pas spécifié non plus si dans les fichiers tu inclus
les répertoires et les fichiers spéciaux, ou seulement les « regular
files ». Je vais supposer qu'on est dans le dernier cas, qui peut se
tester avec la fonction is_file() :

Ceci étant posé, on peut maintenant utiliser preg_replace_callback()
pour enchaîner les deux :

------------------------------------------------------------------------
function filehref($matches) {
$name = $matches[0];
if (is_file($name)) {
return "<a href='file://$name'>$name</a>";
} else {
return $name;
}
}

$chaine = preg_replace_callback('/[a-z0-9._-]+/', 'filehref', $chaine);
------------------------------------------------------------------------

Attention, je n'ai pas testé mon code : à toi de le tester après l'avoir
adapté selon tes besoins. Et si tu as du mal à faire l'adaptation, alors
commence par *bien* spécifier les besoins avant de revenir demander de
l'aide...

Cordialement,
--
Olivier Miakinen
Publicité
Poster une réponse
Anonyme