La fonction substr a toujours fonctionné de la même façon, et je ne bosse que très rarement en PHP5, je suis le plus souvent en PHP4.
EDIT: Pour définir un nombre de caractères A GARDER depuis le début, c’est effectivement la solution de Thomas_R, mais dans ce cas, on ne garde que les 20 premiers caractères, et non “on en supprime 20 à la fin”
Edité le 23/07/2007 à 19:05
substr n’est en aucun cas une expression régulière, et le “-” ici présent est défini pour obtenir l’opposé du nombre donné. Tu confonds peut-être avec une quelconque utilisation ?
En fait, ici, le travail de substr est simple, il prend les caractères de TEXT depuis le caractère A jusqu’au caractère B, 0 étant la position AVANT LE PREMIER T de TEXT. En plaçant une valeur négative pour B, on part en arrière, et en supposant qu’il y a deux occurences de TEXT et que la position initiale pour B est entre les deux, on obtiendrait le curseur ici à la base:
TEXT|TEXT
Et avec B=-2:
TE|XTTEXT
Ce qui devient logique que A=0 et B=-2 donne TE, ou que A=1 et B=-1 donne EX.
Si tu as besoin de plus d’explications, demande ^^
EDIT PS: “je ne m’abuse” est mal employé ici :p, quand on dit “si je ne m’abuse”, on entend “si je ne me trompe pas”, si on se trompe, on dit “je me suis trompé”, de même on dira “je me suis abusé”
Edité le 23/07/2007 à 19:38
La fonction substr() peut être utilisée pour limiter les caractères ou couper un mot.
Explique moi ce que tu veux exactement, et je pourrai t’orienter.
Edité le 23/07/2007 à 20:38
function str_cleanTruncate($chaine,$longueur,$suffixe='') {
if(strlen($chaine) >= $longueur) { // Si la chaine a besoin d'être tronquée
$troncated = substr($chaine, 0, strpos(substr($chaine, $longueur), ' ')+$longueur); // On coupe après le premier espace qui suit le xème caractère
$troncated .= $suffixe; // Rajout du Suffixe eventuel
}
else { // Sinon, le retour est la chaîne elle-même
$troncated = $chaine;
}
return $troncated;
}
Pardon, je suis perfectionniste, je n’aime pas l’idée de >=, et le suffixe peut être génant.
Mettons qu’on prend “…” pour suffixe, la tronque peut donner une chaine plus longue que celle d’avant si elle fait UN CARACTERE de plus que le maximum, il faut donc modifier ton code, je le verrais plutôt ainsi:
function str_cleanTruncate($chaine,$longueur,$suffixe='') {
if(strlen($chaine) > $longueur) { // Si la chaine a besoin d'être tronquée
$troncated = substr($chaine, 0, strrpos(substr($chaine, 0, $longueur-strlen($suffixe)), ' ')); // On coupe après le premier espace PRECEDENT (c'est mieux si on a limite à une taille, il est mieux que ça soit plus court que trop long) le Xème caractère
$troncated .= $suffixe; // Rajout du Suffixe eventuel
}
else { // Sinon, le retour est la chaîne elle-même
$troncated = $chaine;
}
return $troncated;
}
a vrai dire je veux faire à peu pres comme djmick007 mais pour l’instant j’y suis pas encore je suis tombé sur le topic au hasard d’une recherche j’en est profité
j’avais plutot pensé à compter les “mots” comme l’exemple ici
mais compter les espaces vide j’y avais pas pensé du tout
merci pour l’exemple ça va bien me servir
XaF > Comme je disais, j’avais fait ça dans le temps (premiers scripts)
Et tes corrections ne relèvent pas d’une volonté de perfection mais de de correction de bug :super:
Edité le 23/07/2007 à 21:20
C’est bien ce que je disais, mais pas ce que tu as dis “Alors je ne m’abuse” sous entendrait que tu ne t’étais pas trompé, m’enfin, je chipotte là
Pour compter les mots tu peux te renseigner sur la fonction explode(), ça peut t’être utile, et personnellement je la préfère à str_word_count(), bien que ce ne soit pas exactement la même chose et que tu doives toi adapter explode() …
Il n’y avait pas de bug à ta fonction, j’y ai juste apporté les modifications qui, si je devais utiliser cette fonction, m’auraient intéressées, après c’est à chacun de voir et d’adapter à ce qu’il veut, c’est le but de la programmation