2012-05-04 12 views
5

pomocą PHP: Jak mogę wstawić podział wiersza w białych znaków, który mieści się we względnym środku ciąg? Lub innymi słowy, w jaki sposób liczyć słowa w zdaniu, a następnie umieścić podział linii w zdaniu w połowie drogi?Jak dodać podział wiersza w punkcie środkowym ciąg podzielona spacjami

Chodzi o to, aby uniknąć wdów (porzuconych słów) w drugim wierszu artykułów na blogu, zasadniczo przecinając każdy tytuł na pół i umieszczając go na dwóch liniach, jeśli tytuł zajmuje więcej niż jedną linię.

Z góry dziękuję.

Aktualizacja: Witam wszystkich, zdałem sobie sprawę, że potrzebuję funkcji preg_split, aby podzielić tytuł na białe spacje. Przepraszam, jeśli ta część nie była jasna w pytaniu. I zmodyfikowana odpowiedź Asafa i używane to:

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

Jestem nowy na SO i jestem powalony mocą społeczności. Twoje zdrowie.

+0

Chcesz dodać podział wiersza w zdaniu w środku? –

+0

Cześć David, tak. Każda pomoc wyjaśniająca jest mile widziana. Najpierw muszę sprawdzić tytuł artykułu na blogu. Następnie, jeśli ma być duży, aby zmieścić się na jednej linii, muszę umieścić kreskę pośrodku. –

Odpowiedz

5

wordwrap() zastosowaniu w PHP. Możesz użyć długości ciągu podzielonego przez 2 jako drugi argument. Oto przykład:

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

To Wyjścia:

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

Jeśli chcesz wyjście HTML, można użyć opcjonalnego 3rd argumentu, aby określić znaki przerwie. Tak:

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

To brzmi jak to, czego potrzebuję. Off, aby spróbować. Dzięki wielkie. –

+0

@Asaph To jest złe, ponieważ może przeciąć zdanie w środku słowa. –

+1

@ DavidBélanger No. Nie łamie się w środku słów. Na tym polega funkcja ['wordwrap()'] (http://php.net/manual/en/function.wordwrap.php). – Asaph

0

AKTUALIZACJA

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

Produce to:

pójdę do szkoły jutro, jeśli nie jest < br/> \ n
zewnątrz pada a jeśli David jest w porządku z tym.

EDIT: Dodane PHP_EOL dopasować cały układ plusa HTML z < br/>

+0

Wow David, dziękuję. Nie jestem zaznajomiony z wyrażeniami regularnymi, ale wydaje się to bardzo przydatne. Czy powinienem używać tego podejścia zamiast używać funkcji "word_wrap()"? –

+0

@BrandonBrown Przepraszam, że zredagowałem mój post. Lepiej iść z word_wrap. Widziałem, że jest to tytuł gdzieś, tytuł będzie miał wiele słów z przestrzenią. –

+0

@BrandonBrown Właściwie jest to 'wordwrap()'] (http://php.net/manual/en/function.wordwrap.php), a nie 'word_wrap()'. Zaktualizowałem swoją odpowiedź. Najpierw przepraszam za literówkę. – Asaph

Powiązane problemy