voici un code pour éviter que les longs mots ne viennent foutre le bordel dans le design d'un site (je pense aux tableaux en particulier)
ben oui, y'a toujours un gros lourd qui va se mettre un pseudo très long ou dans un forum un message avec des mots de 30 caractères du genre
waaaaaaaaaaaaaaaaaaaaaaazzzzzzzzzzzzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
le résultat est pas très joli (enfin c'est surtout le webmaster qui va faire la gueule lol)
ce code est une fonction qu'on appelle par:
echo format_chaine($chaine,$longueur);
$chaine: la chaine string à traiter
$longueur: longueur maximale d'une ligne
voici un exemple:
$chaine="coucou blablablablablablablablabla il fait beau, les oiseaux chantent lol";
$longueur=20;
la fonction va renvoyer ceci:
coucou blablablablab
lablablablabla
il fait beau, les
oiseaux chantent lol
bon c pas très jolie mais bon bref...
Source / Exemple :
<?
function format_chaine($chaine,$longueur){
$chaine=trim($chaine); //vire les espaces en début et fin de chaine
$chaine=strtr($chaine,array_flip(get_html_translation_table(HTML_ENTITIES))); //vire les cars html qui vont perturber le comptage des lettres
$mots=explode(' ',$chaine); //sépare tous les mots
$nb_mots=count($mots); //compte le nb de mots
$pos=0;
for($i=0;$i<=$nb_mots-1;$i++){
if(strlen($mots[$i])>$longueur){ //si le mot rentre pas sur une seule ligne
$debut=0;
if($longueur-strlen($ligne[$pos])>=$longueur/3){ //si il reste plus d'un tiers de la ligne dispo
$debut=$longueur-strlen($ligne[$pos]);
$ligne[$pos].=substr($mots[$i],0,$debut); // on place sur cette ligne le début du mot
}
$nb_lignes=ceil((strlen($mots[$i])-$debut)/($longueur-1)); //nb de lignes nécessaires pr ce mot
for($j=0;$j<=$nb_lignes;$j++){
$ligne[$pos].=substr($mots[$i],$debut,$longueur); //on découpe ce mot sur le nb de lignes nécessaires
$debut+=$longueur;
}
}else{ //si le mot rentre sur une ligne
if(strlen($ligne[$pos])+strlen($mots[$i])<=$longueur){ //y'a encore de la place sur cette ligne?
$ligne[$pos].=$mots[$i].' '; //oui: on y ajoute le mot
}else{ //non: on ajoute le mot sur une autre ligne
$pos++;
$ligne[$pos].=$mots[$i].' ';
}
}
}
for($i=0;$i<=count($ligne)-1;$i++){ //on remet les caractères html
$ligne[$i]=htmlentities($ligne[$i]);
}
$resultat=implode("<br>\n",$ligne); //on crée une chaine toute propre
return $resultat;
}
?>
Conclusion :
note: avant de traiter la chaine, le texte est débarrassé des caractères html pour éviter de compter 7 caractères pour é au lieu de 1 seul (é)
je me suis inspire de qq messages sur le forum pr faire cette source, mais elle me parait bien longue pour ce qu'elle fait, il doit y avoir un moyen de faire + siimple je pense
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.