Très court extrait: PHP, mots coupés, en comptant les caractères

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;
}

5 commentaires: «Très court extrait: PHP, mots coupés, en comptant les caractères"

  1. 13 septembre 2009 Raben :

    Petite erreur dans le titre "Cash" ,)
    Semra utiles vos messages! ,)

  2. 14 septembre 2009 Giovambattista Fazioli :

    @ Raben: C'est ce qui arrive au petit matin : D Merci

  3. 18 septembre 2009 Santino Bivacqua :

    Bonjour je vais utiliser cette solution pour un certain temps:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $text , $len , $textContinue = '...' ) { Fonction getShortDescription ($ text, $ len, $ {textContinue ='...')
    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.

  4. 18 septembre 2009 Giovambattista Fazioli :

    : @ Santino Bivacqua: intéressant ... J'ai trouvé autour d'une variante qui utilise explode() , en pratique, au lieu de votre stristr() :

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $text , $limit , $msg ) { Fonction wordCut ($ text, $ limite, $ msg) {
    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;
    }
  5. 18 septembre 2009 Santino Bivacqua :

    @ 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 :)

Laisser un commentaire

XHTML TAG PERMIS: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> CODE D'INSERTION:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL