Comme vu dans l' extrait très court: couper mot PHP est plus agréable de casser un texte aux «mots», car elle évite la coupe d'un mot. Il ya encore compter ceux qui préfèrent couper les personnages, car il rend le «coupe» plus homogènes et semblables les uns aux autres, malgré le risque important de couper un mot, coupé le net! En outre, vous devriez également considérer que, à l'exception des cas particuliers, les polices ne sont pas proportionnels, et donc le mot "www" ne peut occuper un espace horizontale en pixels que "Wii".
De même, quand il ya des mots que vous pouvez rencontrer des situations paraddosali, générant des différences apparentes entre les textes qui brisent sìvoglione. Par exemple, l'expression «face à face» contient quatre mots, tout comme "de Washington, la Maison Blanche." Cependant, il est clair que la dernière phrase est visiblement plus «long», en pixels.
Une solution possible au problème est une fonction hybride, puis en tenant compte à la fois la longueur de caractères, à la fois la "coupe" à la fin du mot:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20e 21 22 23 24 25 26 27 28 | / ** * Coupe une chaîne de caractères à la trésorerie des mots * Dans cette version ne sont pas «compté» des espaces * Décommentez la ligne si vous voulez une coupe * Caractère exact * * @ Author = défaire = * @ Date 09/11/2009 * * @ Param (string) string $ à c de coupe * @ Param (int) $ le nombre maximal de caractères * @ Param (string) $ et de la ficelle pour accrocher, par défaut "[...]" * @ Return * / $c , $l , $e = "[...]" ) { Fonction word_cut_for_chars ($ c, s $, $ e = {"[...]") strlen ( $c ) > $l ) { if ( strlen ($ c)> $ l) { explode ( ' ' , $c ) ; $ A = exploser ('', $ c); 0 ; S = 0 $; "" ; R $ = ""; $i = 0 ; $i < count ( $a ) ; $i ++ ) { for ($ i = 0; $ i < comptent ($ a) $ i + +) { strlen ( $a [ $i ] ) ; $ S + = strlen ($ a [$ i]); / / $ S + = (strlen ($ a [$ i]) + 1) / / a aussi "l'espace" $s > $l ) return ( $r . $e ) ; if ($ s> $ l) return ($ r $ s); $a [ $i ] . " " ; R $ .= $ a [$ i]. '" } } ; return $ c; } |










Petite erreur dans le titre "Cash"

Semra utiles vos messages!
@ Raben: C'est ce qui arrive au petit matin
Merci
Bonjour je vais utiliser cette solution pour un certain temps:
2
3
4
5
6
7
8
9
strip_tags ( $text ) ; //Elimino eventuali tag HTML Texte $ = strip_tags ($ text); / / Supprimer toutes les balises HTML
strlen ( $text ) <= ( int ) $len ) { if ( strlen ($ text) <= (int) $ len) {
; return $ texte;
{ Else {}
wordwrap ( $text , ( int ) $len , "___end___" ) ; Texte $ = wordwrap ($ text, (int) $ len ", ___end___");
( $text , 0 , - strlen ( stristr ( $text , "___end___" ) ) ) . $textContinue ; retour substr ($ text, 0, - strlen ( stristr ($ text, "___end___ "))). textContinue $;
}
}
Vous devriez mesurer le temps pris par les deux (peut-être avec de longues chaînes) et de comprendre ce qui est la meilleure solution.
: @ Santino Bivacqua: intéressant ... J'ai trouvé autour d'une variante qui utilise
explode(), en pratique, au lieu de votrestristr():2
3
4
5
6
7
8
9
10
11
strlen ( $text ) > $limit ) { if ( strlen ($ text)> $ limit) {
wordwrap ( $text , $limit , '[cut]' ) ; Txt1 $ = wordwrap ($ text, $ limit, «[coupé] ');
explode ( '[cut]' , $txt1 ) ; Txt2 $ = exploser ("[coupé], txt1 $);
$txt2 [ 0 ] ; $ $ Txt2 ourTxt = [0];
$ourTxt . $msg ; $ $ = $ Msg ourTxt FinalTxt.;
{ Else {}
$text ; FinalTxt $ text = $;
}
; return $ finalTxt;
}
@ Giovambattista Fazioli:

En fait, le principe de fonctionnement est très similaire
Maintenant il ya trois solutions pour tenter de vérifier (dans les textes de long) comme le plus rapide