2012-05-04 15 views
5

Utilizzo di php: Come posso inserire un'interruzione di riga negli spazi bianchi che si trova nel centro relativo della stringa? O in altre parole, come posso contare le parole in una frase e poi inserire un'interruzione di riga nella frase a metà strada?Come aggiungere un'interruzione di riga nel punto centrale di una divisione di divisione per spazio

L'idea è di evitare le vedove (parole abbandonate) sulla seconda riga dei titoli degli articoli del blog tagliando essenzialmente ogni titolo a metà e mettendolo su due righe se il titolo occupa più di una riga.

Grazie in anticipo.

Aggiornamento: Ciao a tutti, ho capito che avevo bisogno della funzione preg_split per dividere il titolo per gli spazi bianchi. Scusa se quella parte non era chiara nella domanda. Ho modificato la risposta di Asaf e usato questo:

$title_length = strlen($title); 
if($title_length > 30){ 
    $split = preg_split('/ /', $title, null, PREG_SPLIT_NO_EMPTY); 
    $split_at = ceil(count($split)/2); 
    echo $split_at; 
    $broken_title = ''; 
    $broken = false; 
    foreach($split as $word_pos => $word){ 
     if($word_pos == $split_at && $broken == false){ 
      $broken_title.= '<br />'."\n"; 
      $broken = true; 
     } 
     $broken_title .= $word." "; 
    } 
    $title = $broken_title; 
} 

Sono nuovo di SO e sto spazzato via dalla potenza della comunità. Saluti.

+0

Si desidera aggiungere un'interruzione di linea in una frase in mezzo? –

+0

Ciao David, sì. Qualsiasi aiuto chiarificatore è il benvenuto. In realtà devo prima controllare la lunghezza del titolo di un articolo sul blog. Quindi, se è troppo grande per stare su una linea, ho bisogno di mettere un'interruzione di riga nel mezzo. –

risposta

5

Utilizzare la funzione wordwrap() di PHP. Puoi usare la lunghezza della tua stringa divisa per 2 come secondo argomento. Ecco un esempio:

<?php 
$sentence = 'This is a long sentence that I would like to break up into smaller pieces.'; 
$width = strlen($sentence)/2; 
$wrapped = wordwrap($sentence, $width); 
echo $wrapped; 
?> 

Produce:

This is a long sentence that I would 
like to break up into smaller pieces. 

Se volete output HTML, è possibile utilizzare il terzo argomento opzionale per specificare i caratteri di interruzione. Come questo:

$wrapped = wordwrap($sentence, $width, '<br />'); 
+1

Sembra proprio quello di cui ho bisogno. Fuori per provarlo. Grazie mille. –

+0

@Asaph Questo è male perché può tagliare la frase nel mezzo di una parola. –

+1

@ DavidBélanger No. Non si rompe nel mezzo delle parole. Questo è il punto della funzione ['wordwrap()'] (http://php.net/manual/en/function.wordwrap.php). – Asaph

0

AGGIORNATO

<?php 
$Sentence = 'I will go to the school tomorrow if it is not raining outside and if David is ok with it.'; 
$Split = explode(' ', $Sentence); 

$SplitAt = 0; 
foreach($Split as $Word){ 
    $SplitAt+= strlen($Word)-1; 
    if($SplitAt >= strlen($Sentence)){ 
     break; 
    } 
} 

$NewSentence = wordwrap($Sentence, $SplitAt, '<br />' . PHP_EOL); 


echo $NewSentence; 
?> 

produrre questo:

andrò alla scuola domani se non è < br/> \ n
fuori piove e se David è d'accordo.

EDIT: Aggiunto PHP_EOL per abbinare tutti i sistemi più html con < br/>

+0

Wow David, grazie. Non ho molta familiarità con le espressioni regolari, ma questo sembra davvero utile. Qualsiasi motivo dovrei usare questo approccio piuttosto che usare la funzione 'word_wrap()'? –

+0

@BrandonBrown Mi dispiace, ho modificato il mio post. È meglio andare con word_wrap. Ho visto che era per un titolo da qualche parte, un titolo avrà più parole con lo spazio. –

+0

@BrandonBrown In realtà è ['wordwrap()'] (http://php.net/manual/en/function.wordwrap.php), non 'word_wrap()'. Ho aggiornato la mia risposta. Mi dispiace per l'errore di battitura inizialmente. – Asaph