non toujours pas :
Warning: preg_replace_callback() requires argument 2, 'test_lenght', to be a valid callback
non toujours pas :
Warning: preg_replace_callback() requires argument 2, 'test_lenght', to be a valid callback
Salut
L'idée de l'entraide est que chacun y mette du sien...
Mise au point :cbroissa : essaie de lire attentivement le code que l'on te propose et de le comprendre avant de crier au secours. En l'occurence, je suppose que tu as supprimé la fonction de callback fournie auparavant par Anduriel.
- Oublier les fonctions POSIX (ereg)
- Adopter les fonctions PCRE (preg)
- Les PCRE ont besoin de délimiteurs (le même caractère en début et fin d'expression) pour fonctionner, car cela permet de mettre des modificateurs à la fin de la regex (cf. la doc sur les PCRE)
- Utiliser une fonction de callback signifie que l'on délègue le remplacement de preg_replace à une autre fonction. Il faut donc que cette autre fonction soit définie dans le code...
non je n'ai pas supprimé la fonction,
j'ai malheureusement pas le temps de me pencher sur les regex que je ne maitrise pas, c'est pour ça que je demande une aide complète.
Rofl...
test_lenght => test_length
Ce code fonctionne très bien chez moi. L'original d'Anduriel également.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <?php define('MAX_SIZE', 50); function test_length($matches) { $str = $matches[1].'://'.$matches[2]; if (strlen($str) > MAX_SIZE) return '<a href="'.$str.'" target="_blank" class="style">'.substr($str, 0, MAX_SIZE).'...<a>'.$matches[3]; else return '<a href="'.$str.'" target="_blank" class="style">'.$str.'<a>'.$matches[3]; } $message = 'Salut, http://www.killtrees.free.fr/test/index.php?id=1&php=2# test'; echo preg_replace_callback('#(http|ftp)://([a-z0-9.?/&=\#]+)([[:space:]]+|$)#Usi', 'test_length', $message); ?>
Question : pourquoi avoir mis "|$" à la fin ?
bon ben là, j'ai rien à dire, sauf à présenter mes excuses,
j'ai corrigé la faute d'orthographe, et j'ai repris le code sans recorriger la faute,
merci pour la leçon Yogui,
merci à tous les autres pour votre aide en particulier Anduriel.
Lol, désolé pour toi, je ne pouvais pas deviner :/
Juste un truc que je n'avais pas vu : mettez toujours les accolades. C'est mieux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <?php define('MAX_SIZE', 50); function test_length($matches) { $str = $matches[1].'://'.$matches[2]; if(strlen($str) > MAX_SIZE){ return '<a href="'.$str.'" target="_blank" class="style">'.substr($str, 0, MAX_SIZE).'...<a>'.$matches[3]; } else{ return '<a href="'.$str.'" target="_blank" class="style">'.$str.'<a>'.$matches[3]; } } $message = 'Salut, http://www.killtrees.free.fr/test/index.php?id=1&php=2# test'; echo preg_replace_callback('#(http|ftp)://([a-z0-9.?/&=\#]+)([[:space:]]+|$)#Usi', 'test_length', $message); ?>
Des accolades ? des simples guillemets tu veux dire ? je vois que ce changement le Usi pour ne pas tenir compte de la casse.
ça sert à quoi de mettre ' plutôt que " ?
J'ai ajouté des accolades au if/else.
Pour les guillemets : http://pbnaigeon.developpez.com/tuto...phe-guillemet/
oulala,
faut que j'arrête.
merci pour le lien
EDIT : une petite amélioration pour avoir les caractères - et _ dans les url
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $message = preg_replace_callback('#(http|ftp)://([a-z0-9.\-_?/&=\#]+)([[:space:]]+|$)#Usi', 'test_length', $message);
Salut,Envoyé par Yogui
En fait il voulais que ça convertisse en fin de chaine, et $ indique une fin de chaine. Donc pour moi ça veut dire "prendre jusqu'à l'espace ou (|) la fin de chaine ($)". C'est pas comme ça que tu ferai? D'ailleur ça métonne que ça fonctionne
Non, j'aurais simplement mis [[:space:]]? pour rendre l'espace obligatoire mais pas la barre | car je ne sais pas comment réagit PHP face à cette expression précie. Est-ce qu'il considère qu'il lui faut un caractère après |, donc il convertit le dollar en caractère au lieu de le prendre pour ancre de "fin de chaîne" ? Est-ce qu'il voit le dollar et se dit "flûte, il m'a pas donné d'alternative, je zappe la barre |" ? Est-ce qu'il zappe à la fois la barre et le dollar ?
Aucune idée mais je doute que cette expression réagisse comme tu le souhaitais. Si tu n'en as pas le coeur net, il vaut mieux trouver une solution plus évidente (et il y en a).
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager