limiterl'affichage d'une variable textarea en nbr de ligne

WRInaute occasionnel
Bonjour,

je cherche à limiter l'affichage d'une variable contenu dans un champs textarea. J'arrive à limiter l'affichage au niveau du nombre de caractères de la manière suivante :

$ma_variable=substr($ma_variable,0,100);

ça fonctionne très bien sauf que mes utilisateurs font souvent des sauts à la ligne ce qui fou en l'air ma mise en page, je voudrais donc également que l'affichage soit limité au deux premières lignes contenues dans la variable ... je vois pas comment faire ...

Merci d'avance ...
 
WRInaute occasionnel
Bonjour,

Je ne pense pas qu'il y ai de solution certaine, cela reste du bidouillage car même s'il n'y a pas de retour à la ligne, 100 caractères ne forme pas une chaine de longueur constante.

Pour ne pas couper un mot en plein milieu, refais un substr avec un strrpos sur l'espace (" ") pour raccourcir au dernier espace trouvé dans la chaine (après avoir apliqué le 1er substr bien sur).

Pour tes histoire de 2 lignes, il faut faire des testes pour voir si les 100 premiers caractères comportent un ou des retours ligne.

Ce code permet par exemple de remplacer les retours ligne par un <br />
ereg_replace("(\r\n|\n|\r)", "<br />", $text)

Tu peux soit décider de supprimer les retours ligne, soit dire j'ai 2 lignes de 50 caractères, si je rencontre un retour ligne et que la première partie du texte fait moins de 50 caractères alors... etc. :wink:

Nicolas.
 
WRInaute occasionnel
Tu peux éclater $ma_variable en mettant chaque ligne dans la case d'un tableau.
Comme ça tu ne gardes qu'une ou deux lignes et tu coupes à 100

Code:
$arr = explode("\n", $ma_variable);
if(count($arr)<=2) {
    $ma_variable=substr($ma_variable, 0, 100); 
}
else {
    $ma_variable=substr($arr[0] ."\n". $arr[1], 0, 100); 
}

Comme le dit absoluteweb, tu peux ajouter à ce code une meilleure gestion de la coupure afin de ne pas couper un mot au milieu
 
WRInaute occasionnel
spoutnik a dit:
absoluteweb a dit:
Ce code permet par exemple de remplacer les retours ligne par un <br />
ereg_replace("(\r\n|\n|\r)", "<br />", $text)

nl2br() c'est pas plus simple ? :)
Si c'est plus simple lorsque tu veux remplacer un retour ligne par un <br /> mais mon exemple permet de le remplacer par n'importe quoi :wink:
 
Discussions similaires
Haut