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?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
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() : <http://fr.php.net/manual/en/function.is-file.php>
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
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() :
<http://fr.php.net/manual/en/function.is-file.php>
Ceci étant posé, on peut maintenant utiliser preg_replace_callback()
pour enchaîner les deux :
<http://fr.php.net/manual/en/function.preg-replace-callback.php>
------------------------------------------------------------------------
function filehref($matches) {
$name = $matches[0];
if (is_file($name)) {
return "<a href='file://$name'>$name</a>";
} else {
return $name;
}
}
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...
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() : <http://fr.php.net/manual/en/function.is-file.php>
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...